Qt жалуется на deposit.h на строке 5, говоря «имя ожидаемого класса».Почему Qt говорит мне: ожидаемое название класса?
Я знаю, что это связано с моими заголовочными файлами и порядком в том, как я их включаю.
Но я вижу, все должно быть в порядке? Deposit.h знает о Transaction.h и наоборот.
Имейте в виду, что это незавершенное производство. Кричите, если вам нужен файл реализации.
Deposit.h
#ifndef DEPOSIT
#define DEPOSIT
#include "transaction.h"
class Deposit : public Transaction {
public:
Deposit(double amount);
QString toString() const;
double computeCost() const;
private:
double m_Amount;
static double m_Fee;
};
#endif // DEPOSIT
Transaction.h
#ifndef TRANSACTION
#define TRANSACTION
#include <QString>
#include <QTextStream>
#include <QList>
#include <QDate>
#include "deposit.h"
class Transaction {
public:
Transaction(QString type, QDateTime datetime);
QString getType() const;
QString toString() const;
QDateTime getDateTime() const;
virtual double computeCost() const = 0;
protected:
QString m_Type;
QDateTime m_DateTime;
};
#endif // TRANSACTION
SavingsAccount.h
#ifndef SAVINGSACCOUNT
#define SAVINGSACCOUNT
#include "transaction.h"
class SavingsAccount {
public:
SavingsAccount(QString name, QString num);
virtual ~SavingsAccount();
void addTransaction(Transaction* t);
double totalTransactionCost() const;
QString frequentTransactionType() const;
QList<Transaction*> transactionOnAdate(QDate date) const;
virtual QString toString() const;
private:
QString m_CustomerName;
QString m_AccountNumber;
QList<Transaction*> m_TransactionList;
};
#endif // SAVINGSACCOUNT
main.cpp
#include "savingsaccount.h"
int main()
{
QTextStream cout(stdout);
QTextStream cin(stdin);
SavingsAccount Acc("John Doe", "999");
cout << endl;
return 0;
}
будет добавлять строки 'класса Transaction,' до определения класса Депозит помощи ? – Shf
У вас есть круговая зависимость, 'Transaction.h' зависит от' Deposit.h', которая зависит от 'Transaction.h', которая зависит от' Deposit.h' и т. Д. Легко нарушить эту зависимость в вашем случае, поскольку 'Transaction .h' действительно не нужно «Deposit.h» или что-нибудь в нем. –
@JoachimPileborg не так ли используется #ifndef? который должен просто не интерпретировать рекурсию. –