c++ - 从继承中解决循环依赖
问题描述
是否不可能包含基类标头并通过它包含其所有子类?
我似乎对我的基类及其子类产生了循环依赖。
从程序入口开始,我需要根据用户输入初始化其中一个子类。我以为我可以包含基类的标头,其中包含子类的标头:
主文件
#include "baseclass.h"
int main()
{
...
}
基类.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
抛出:
error: invalid use of incomplete type 'class Base'
删除:
error: expected class-name before '{' token {
如果不放置一个包含所有子类标头的中间“工厂”,则不确定如何解决此问题,每个子类标头都包含基类标头。
解决方案
删除#include "sub1.h"
from baseclass.h
,并创建一个单独的头文件,其中包含您需要的所有派生类,并将此头文件包含在 main.cpp 中。
注意:class Base; // forward declaration
不需要此行。
推荐阅读
- mysql - 如何将 Laravel 雄辩的 where 子句编写为普通的 mysql 查询?
- websocket - 如何关闭本地主机上的 socket.io 获取请求?
- java - 在 Pega 平台上跟踪生成的 Java 的编译
- r - 如何使用 actionButton 更改 R Shiny 中 selectInput 上的选定值?
- python - 具有身份验证的 Selenium 代理
- mysql - xampp mysql文件夹是只读的,不能删除只读属性
- php - 致命错误:无法创建类实例
- python - 有没有办法在python中按大小对水平条形图进行排序?
- elasticsearch - apache NIFI ScrollElasticsearchHttp 过滤掉具有空字段的记录
- python - Pancakeswap 交易失败消息 python