我遇到了这样的问题:更新
class A
{
public:
A(){}
int i;
B b;
};
class B
{
public:
B(){}
int j;
A a;
};
Run Code Online (Sandbox Code Playgroud)
当我在一个.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
Nik*_*sov 11
这在C++中不可能逐字逐句.解释是编译器需要完整的,而不仅仅是前向的类声明才能将它用作另一个类的成员.它只需要一个类对象的大小.
C++(以及C语言)中的解决方法是使用指针或引用作为其中一个类的成员.这样你可以使用前向声明如下:
class A; // forward declaration
class B {
// ...
A* pa;
};
class A { // full declaration
// ...
B b;
};
Run Code Online (Sandbox Code Playgroud)
保持点实例的A实例B(或引用)有效是你的(不是编译器或运行时)的责任.