我是从 Java 开始接触 C++ 的新手,所以我不确定自己做错了什么
person.h
中的以下行给我错误 Transaction has not been declared
。
void pay(Transaction transaction);
我有一个 Transaction 对象,我是否必须在 person.h
文件的某处声明/包含它?
这是我的person.h
源代码
#ifndef PERSON_H_
#define PERSON_H_
#include "Transaction.h"
using std::string;
class Person {
public:
class Transaction;
Person();
virtual ~Person();
void pay(Transaction* transaction);
};
#endif /* PERSON_H_ */
最佳答案
在 C++ 中,将声明与定义分开是一件大事。声明告诉如何使用代码,并且位于头文件 (.h
) 中。定义是代码本身,位于源 (.cpp
) 文件中。
如果文件仅通过指针或引用引用Transaction
(在 header 中很常见),那么您只需预先声明事务类,使用class Transaction;
。如果文件需要一个实际的交易值,那么您需要#include "Transaction.h"
。
如果它仍然说 Transaction
是一个 undefined symbol ,这意味着你有一个循环依赖:一系列在循环中相互包含的 header 。在这种情况下,您需要更改其中一个头文件以仅使用指针和引用,并在其他头文件中预先声明类。
关于c++ - “对象”尚未声明错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7853213/