gpt4 book ai didi

c++ - 头文件,前向声明

转载 作者:行者123 更新时间:2023-11-30 03:26:38 30 4
gpt4 key购买 nike

我在编写我的项目时遇到了这个问题。我有 2 个 header ,每个 header 都有一个类,它们需要另一个,如下所示。

我以为这只是需要使用前向声明,但仍然不起作用。我没有想法。

寻求帮助:D

Headers、Main 和编译器错误如下所示:

标题 1

#ifndef OBJ2_H
#define OBJ2_H
#include "obj1.h"
class obj1;

class obj2{
public:
obj1 e;
};

#endif // OBJ2_H

标题 2

#ifndef OBJ1_H
#define OBJ1_H
#include "obj2.h"
class obj2;

class obj1
{
obj2 e;
};

#endif // OBJ1_H

主要

#include <iostream>
#include "obj1.h"
#include "obj2.h"
using namespace std;

int main()
{
obj1 class1;
obj2 class2;
cout << "Hello world!" << endl;
return 0;
}

错误:

  • include\obj2.h|8|错误:字段“e”的类型“obj1”不完整|
  • include\obj1.h|8|错误:字段“e”的类型“obj2”不完整|

最佳答案

在这种情况下循环依赖是没有意义的。但是如果你删除它,声明问题仍然存在。编写前向声明后,头文件中的原始声明将被重新声明。实际上,前向声明用于避免将文件包含到另一个 header 中。所以您只需要在声明 obj2 之前编写 class obj1; 并将 obj1.hpp 包含在 obj2 源文件 (.cpp) 中。尽管如此,只有当您通过引用或指针使用这些对象时,前向声明才有效。在你的代码中

class obj1
{
obj2 e;
};

obj2 是由值组成的,所以它不会用前向声明编译。您需要将其删除并仅保留 header 包含。

附言抱歉,“声明”一词出现得太频繁了

关于c++ - 头文件,前向声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48187983/

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