C++转发声明混乱

C++ Forward Declaration confusion

本文关键字:混乱 声明 转发 C++      更新时间:2023-10-16

我在前向声明方面遇到了一些问题,嗯,我对所有事情都感到困惑。我有三个互相依赖的班。例如:

  • ClassA依赖于ClassB和ClassC
  • ClassB依赖于ClassA
  • ClassC依赖于ClassA
  • ClassA和ClassC只有静态方法和静态成员

我想知道如何以这种方式使用前向声明来避免循环依赖关系。

谢谢你的帮助。

#include <iostream>
using namespace std;
class B;
class C;
class A{
public:
    static B instanceOfB;
    static C instanceOfC;
    static void foo(){
        cout << "A static foo called"<< endl;
    }
};

class C{
   static A instanceOfA;
};
A C::instanceOfA = A();

class B{
    A instanceOfA;
};
B A::instanceOfB = B();

int main(){
    cout << "main run"<<endl;
    A::foo();
    return 0;
}

首先,当类相互依赖时,这是一个糟糕的设计。第二,这种依赖并不意味着你必须持有类的对象,相反,如果这种依赖很复杂,你需要使用指向对象的"指针",而不是持有对象。"指向对象的指针"意味着编译器不需要该类的完整原型。