This question already has answers here:
How to create two classes in C++ which use each other as data?
(2个答案)
3年前关闭。
我遇到这样的问题: UPDATE
当我在一个.h文件中定义它时,它将给出错误。我认为问题在于递归定义。但是有人可以帮我解决这个问题吗?
确保
(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