c++ - 从继承中解决循环依赖

标签 c++ c++11

难道不能包含基类 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/

相关文章:

c++ - 为实体组件系统实现多态组件

c++ - 这个 _com_ptr_t move 分配有什么目的吗?

c++ - 使用 cmake 编译日期和时间

c++ - 在 Eigen C++ : mix complex matrix and real matrix

c++ - 为什么 "dynamic exception"保证会导致开销?

c++ - 将argpack分成两半?

c++ - 为什么我们使用预处理器指令来定义变量?

c++ - C 和 C++ 可执行文件之间的区别?

c++ - 如何将包含逗号的字符串字符串化?

c++ - 在没有 clang 警告的情况下在 C++11 中非平凡地初始化模板类的静态成员