我在一个cpp文件中有两个类,如下所示:
class A
{
private:
int somethingPrivate;
B *aReferenceToB;
public
B returnSomeB()
{
aReferenceToB->someFunction();
return *aReferenceToB;
}
};
class B
{
private:
A needed_Class_A_var;
public:
void someFunction()
{
return;
}
};
这两个类的ciclic使用,一个在另一个内,产生各种错误,如
错误C2143:语法错误:缺少';'在'*'之前
如何在不为每个类创建单独文件且仅使用一个cpp文件的情况下解决此ciclic包含问题?
我尝试在class B;
定义之前添加class A
声明,但这些声明无效。
答案 0 :(得分:3)
在您访问B
类(aReferenceToB->someFunction()
)的成员之前,或者甚至尝试返回B
的对象(而不是指向B
的指针)({{ 1}}),您需要首先完整定义B returnSomeB
。
因此,只需从class B
定义中提取returnSomeB
正文,并将其放在已知class A
完整定义的位置。
B
请注意,如果您尝试写这样的内容:
class B;
class A
{
private:
int somethingPrivate;
B *aReferenceToB;
public:
B returnSomeB();
};
class B
{
private:
A needed_Class_A_var;
public:
void someFunction()
{
return;
}
};
B A::returnSomeB(){
aReferenceToB->someFunction();
return *aReferenceToB;
}
这是有效的,因为你只是在这里使用指针进行操作(在这种情况下,你没有创建class B;
class A
{
private:
int somethingPrivate;
B *aReferenceToB;
public:
B* returnSomeB() { return aReferenceToB; }
};
的对象,并且你没有访问任何B
' s成员),并且指针的大小在编译时是已知的,即使没有B
定义。