This question already has answers here:
How to create two classes in C++ which use each other as data?

(2个答案)


3年前关闭。




我遇到这样的问题: UPDATE
class A
{
public:
    A(){}
    int i;
    B b;
};

class B
{
public:
    B(){}
    int j;
    A a;
};

当我在一个.h文件中定义它时,它将给出错误。我认为问题在于递归定义。但是有人可以帮我解决这个问题吗?
  • error C2146: syntax error : missing ';' before identifier 'b' c:\users\xingyo\documents\visual studio 2010\projects\cppalgo\recudef\test1.h 9 1 RecuDef
  • error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\xingyo\documents\visual studio 2010\projects\cppalgo\recudef\test1.h 9 1 RecuDef
  • error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\xingyo\documents\visual studio 2010\projects\cppalgo\recudef\test1.h 9 1 RecuDef
  • 最佳答案

    在C++中不可能逐字记录。解释是,编译器需要完整而不是仅向前声明一个类,才能将其用作另一个类的成员。它只需要一个类对象的大小。

    C++(和C语言)中的解决方法是使用指针引用作为其中一个类的成员。这样,您可以使用前向声明,如下所示:

    class A; // forward declaration
    
    class B {
        // ...
        A* pa;
    };
    
    class A { // full declaration
        // ...
        B b;
    };
    

    确保A实例指向(或引用)的B实例有效是您(而不是编译器或运行时)的责任。

    07-24 13:53