这可能看起来很奇怪,但我的一个程序中有一个问题,我有一个A类需要一个B类变量,而B类需要一个指向其中A类的指针,所以我可以确定哪个类附加到什么......
我得到错误,因为在A类中它表示B类尚未定义,而在B类中它表示A类尚未定义......
我的两个包含单独类的头文件互相包含,我试图转发声明我的类,例如A级; B级;但我得到编译器错误,如:
error C2079: 'CFrame::menu' uses undefined class 'CMenu'
我需要一个指向B类中A类的指针,因为我想稍后将它传递给另一个类。
答案 0 :(得分:6)
在定义A
:
B
class A; // declaration of A
class B // definition of B
{
A* foo;
// ...
};
class A // definition of A
{
B bar;
// ...
};
这种声明通常被称为前向声明。
答案 1 :(得分:2)
首先,考虑重新设计你的课程。循环依赖是不好的做法,很有可能你可以通过更优雅的类设计来完全避免这种情况。
那就是说,你可以使用前向引用解决问题(此时,你需要使用指针或引用) -
class B;
class A
{
B *pPtr;
};
class B
{
A typeA;
};
答案 2 :(得分:0)
您可以通过简单地指定“B”是什么来避免前向声明:
class A
{
public:
class B* pB;
};
class B
{
public:
A a;
};
如果您遇到此问题,可能是因为您将声明包含在实施中。如果将实现和标题分开,则在此方案中可能会遇到更少的问题。