- 出现原因:两个类头文件相互包含,这里以类 ExampleA 和 ExampleB 为例进行分析。
example_a.h声明
#include "example_b.h"
class ExampleA{
ExampleA();
~ExampleA();
}
example_b.h声明
#include "example_a.h"
class ExampleB{
ExampleB();
~ExampleB();
private:
ExampleA *emample_a_;
}
-
如上述代码所示,此时编译将会报两个错误:
error C2146: 语法错误:缺少“;”(在标识符emample_a_的前面)
error C4430: 缺少类型说明符 - 假定为 int, 注意: C++ 不支持默认 int。 -
解决办法:删掉其中一个类中包含的头文件,并在该类前声明删掉头文件中的类。如下所示:
example_b.h声明
class ExampleA;
class ExampleB{
ExampleB();
~ExampleB();
private:
ExampleA *emample_a_;
}
- 类对象声明可以在头文件中,但是对象的实例化需要放在 example_b.cpp中,且需要在example_b.cpp中添加之前删除的头文件。如下所示:
example_b.cpp声明
#include "example_a.h"
ExampleB::ExampleB()
{
emample_a_ = new ExampleA();
}
- 总结
总的来说就是删除相互包含的头文件,添加所需类的声明,并将该头文件添加到相应cpp文件中。
如果此文帮助到你( •̀ ω •́ )✧,动动小手点个赞可好O(∩_∩)O。
原创文章,转载请标明本文出处。