难道不能包含基类 header 并通过它包含它的所有子类吗?
我似乎对我的基类及其子类产生了循环依赖。
从程序入口开始,我需要根据用户输入初始化其中一个子类。我想我可以包含基类的 header ,其中包含子类的 header :
main.cpp
#include "baseclass.h"
int main()
{
...
}
baseclass.h
#include "sub1.h"
class Base
{
public:
int name;
};
sub1.h
#include "baseclass.h"
class Base; // forward declaration
class Sub : public Base
{
public:
int age;
};
所以依赖是:
main -> baseclass -> sub1 -> baseclass -> sub1 -> etc...
如果我保留前向声明,g++ -std=c++11 -o prog *.cpp
抛出:
错误:不完整类型“class Base”的使用无效
删除:
错误:在“{”标记 {
之前需要类名
不知道如何在不放置一个包含所有子类 header 的中间“工厂”的情况下解决这个问题,每个子类 header 都包含基类 header 。
最佳答案
从baseclass.h
中删除#include "sub1.h"
,并创建一个单独的头文件,其中包含您需要的所有派生类,并包含这个将头文件放入 main.cpp。
注意:这一行 class Base;//不需要前向声明
。
关于c++ - 从继承中解决循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51627991/