Coin.h
Code: Alles auswählen
#include <QString>
#ifndef COIN_H
#define COIN_H
class Coin{
private:
public:
//Member
int value;
QString name;
//Constructors
Coin(int _v, QString _n):value(_v),name(_n){};
};
#endif // COIN_H
Code: Alles auswählen
#include "Coin.h"
#include <iostream>
#include <stack>
#include <QStack>
#ifndef COINMAGAZINE_H
#define COINMAGAZINE_H
class CoinMagazine{
private:
//magazine
QStack<Coin> CHF5Stack;
QStack<Coin> CHF2Stack;
QStack<Coin> CHF1Stack;
QStack<Coin> R50Stack;
QStack<Coin> R20Stack;
QStack<Coin> R10Stack;
int maxSize;
// Coin Types
Coin CHF5;
Coin CHF2;
Coin CHF1;
Coin R50;
Coin R20;
Coin R10;
public:
//CoinMagazine(int _ms): maxSize(_ms);
CoinMagazine():
//Max magazine size
maxSize(20),
//Defines the coins
CHF5(500,"5Fr"),
CHF2(200,"2Fr"),
CHF1(100,"1Fr"),
R50(50,"0.5Fr"),
R20(20,"0.2Fr"),
R10(10,"0.1Fr")
{
// Starts magazine with 10 coins per type.
depositCoin(CHF5,10);
depositCoin(CHF2,10);
depositCoin(CHF1,10);
depositCoin(R50,10);
depositCoin(R20,10);
depositCoin(R10,10);
};
QStack<Coin>& selectCoinMagazine(Coin _c){
switch(_c.value){
case 500: return CHF5Stack; break;
case 200: return CHF2Stack; break;
case 100: return CHF1Stack; break;
case 50: return R50Stack; break;
case 20: return R20Stack; break;
case 10: return R10Stack; break;
}
}
bool depositCoin(Coin _c,int n){
for(int i = 0;i<n;i++){
if(selectCoinMagazine(_c).size() < maxSize){
selectCoinMagazine(_c).push(_c);
}
else{
return false;
}
}
return true;
}
#endif // COINMAGAZINE_H
Code: Alles auswählen
#include "CoinMagazine.h"
#include "Coin.h"
#ifndef TICKETMACHINE_H
#define TICKETMACHINE_H
class TicketMachine{
private:
CoinMagazine cm;
int balance;
public:
TicketMachine():cm(), balance(0){
}
bool recieveCoin(Coin _c){
if(cm.depositCoin(_c) == true){
balance = balance + _c.value;
}
else{
}
}
bool requestCoin(Coin _c){
}
};
#endif // TICKETMACHINE_H
Code: Alles auswählen
#include <QtGui/QApplication>
#include "mainwindow.h"
#include "CoinButton.h"
#include "Coin.h"
#include "TicketMachine.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>
#include <QApplication>
#include <QTextEdit>
#include <QString>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//Widgets
QWidget* win = new QWidget;
QHBoxLayout* HLayout = new QHBoxLayout(win);
QVBoxLayout* VLayout = new QVBoxLayout(win);
//Buttons
CoinButton* but1 = new CoinButton("5Fr");
CoinButton* but2 = new CoinButton("2Fr");
CoinButton* but3 = new CoinButton("1Fr");
CoinButton* but4 = new CoinButton("50R");
CoinButton* but5 = new CoinButton("20R");
CoinButton* but6 = new CoinButton("10R");
//TextField
QTextEdit* TBox = new QTextEdit;
//Button Resize
but1->resize(100,30);
but2->resize(100,30);
but3->resize(100,30);
but4->resize(100,30);
but5->resize(100,30);
but6->resize(100,30);
//Button values set up
//Set up VLayout
VLayout->addWidget(but1);
VLayout->addWidget(but2);
VLayout->addWidget(but3);
VLayout->addWidget(but4);
VLayout->addWidget(but5);
VLayout->addWidget(but6);
//Set Up HLayout
HLayout->addWidget(TBox);
HLayout->addLayout(VLayout);
//Set Up Text Field
TBox->setReadOnly(true);
TicketMachine tm = TicketMachine();
TBox->setPlainText(TicketMachine.cm.CHF5Stack.size());
win->show();
return a.exec();
}
Ich kann meinen code nicht kompillieren. wenn ich meine main laufen lasse OHNE die files coin.h coinmagazine.h oder ticketmachine.h dann gibts mir das fenster mit buttons etc ohne problem.
Lasse ich die main laufen, entferne aber alles was mit dem TicketMachine.h zu tun hat dann gehts auch ganz schön.
füge ich dann TicketMachine hinzufüge bekomme ich gegen die 30 Fehler, viele davon in Qlayoutitem.
auch wenn die class Ticketmachine so definiert ist:
Code: Alles auswählen
class TicketMachine{
}
CoinButton ist übrigens nichts anderes als eine kopie von QPushbutton:
Code: Alles auswählen
#ifndef COINBUTTON_H
#define COINBUTTON_H
#include <QPushButton>
class CoinButton : public QPushButton
{
Q_OBJECT
public:
CoinButton(const QString& title, QWidget *parent = 0);
};
#endif // COINBUTTON_H