gpt4 book ai didi

c++ - 为什么 Qt 告诉我 : expected class name?

转载 作者:行者123 更新时间:2023-11-28 02:29:57 24 4
gpt4 key购买 nike

Qt 在第 5 行提示 deposit.h,说“预期的类名”。

我知道这与我的头文件以及我如何包含它们的顺序有关。
但据我所知,一切都应该没问题吗? Deposit.h 知道 Transaction.h,反之亦然。

请记住,这是一项正在进行的工作。如果您需要实现文件,请大声说出来。

存款.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

事务.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

储蓄账户.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;
}

最佳答案

尽可能使用 forward declarations在标题中,而不是#including 标题。例如,在 SavingsAccount 类中,您使用 Transaction 指针而不是 Transaction 实例,因此不需要包含 Transaction header 。

除了因为编译器必须打开包含的文件并检查头文件保护而导致编译速度的开销之外,您还可能会遇到诸如循环依赖等问题。

因此,将 SavingsAccount 类更改为:-

#ifndef SAVINGSACCOUNT
#define SAVINGSACCOUNT

class Transaction; // forward declaration of the class Transaction

class SavingsAccount {

...

};

Transaction 类不引用存款,因此可以删除#include "deposit.h"。

如果您随后需要在 main.cpp 中创建存款类,请在 main.cpp 顶部添加#include "deposit.h"

关于c++ - 为什么 Qt 告诉我 : expected class name?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29298036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com