B类中的A类变量和A类中B类的指针?

时间:2010-08-17 22:54:15

标签: c++ visual-studio

这可能看起来很奇怪,但我的一个程序中有一个问题,我有一个A类需要一个B类变量,而B类需要一个指向其中A类的指针,所以我可以确定哪个类附加到什么......

我得到错误,因为在A类中它表示B类尚未定义,而在B类中它表示A类尚未定义......

我的两个包含单独类的头文件互相包含,我试图转发声明我的类,例如A级; B级;但我得到编译器错误,如:

error C2079: 'CFrame::menu' uses undefined class 'CMenu'

我需要一个指向B类中A类的指针,因为我想稍后将它传递给另一个类。

3 个答案:

答案 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;
};

如果您遇到此问题,可能是因为您将声明包含在实施中。如果将实现和标题分开,则在此方案中可能会遇到更少的问题。