c++ - “对象”尚未声明错误

标签 c++ object parameters syntax-error declaration

我是从 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/

相关文章:

javascript - 书签以嵌入带有参数的YouTube页面

c++ - 找到 2 个等和子序列,具有最大和?

c++ - 在不需要时使用 "template"和 "typename"消歧器

c++ - 无法使用 ifstream 将 txt 文件的最后一部分写入 cout

c++ - 链表 - 指针

C++创建没有默认构造函数的对象数组

ruby-on-rails - 为什么我得到 "Unpermitted parameter: format"?

javascript - Object.fromEntries 的替代方案?

iphone - xcode 6 对象库为空(没有匹配项)

parameters - 使用pytorch的rnn中隐藏维度和n_layers之间的区别