Ciclic类在另一个类中使用

时间:2013-09-12 14:56:13

标签: c++ class

我在一个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声明,但这些声明无效。

1 个答案:

答案 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定义。