【问题标题】:How to initialize a forward-declared class in C++ [duplicate]如何在 C++ 中初始化前向声明的类 [重复]
【发布时间】:2023-02-21 09:48:44
【问题描述】:

我有两个类,AB,它们相互依赖:

class A {
public:
    B* b;
    A() {
        b = new B();
    }
};

class B {
public:
    A* a;
    B() = default;
};

这段代码将无法编译,因为存在循环依赖链。但是,即使我转发声明类 B 来解决循环依赖,仍然存在错误:

.code.tio.cpp:7:11: error: allocation of incomplete type 'B'
                b = new B();
                        ^

我相信这个错误表明我无法初始化 B 因为它是一个前向声明的类,但我仍然需要 AB 相互依赖,那么我该如何解决这个错误?

【问题讨论】:

    标签: c++ circular-dependency forward-declaration


    【解决方案1】:

    要解决此问题,请将 A() 构造函数的主体移动到定义完整的 B 类之后的某个位置,如下所示:

    class B;
    
    class A {
    public:
        B* b;
        A();
    };
    
    class B {
    public:
        A* a;
        B() = default;
    };
    
    A :: A() {
       b = new B();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-10
      • 2013-09-25
      • 2017-01-11
      • 1970-01-01
      • 2013-12-08
      • 2012-02-12
      • 1970-01-01
      • 2018-08-13
      相关资源
      最近更新 更多