0

我在一个 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但它不能正常工作。

4

1 回答 1

3

在你访问B类( aReferenceToB->someFunction())的成员,甚至试图返回B(不是指向B)( B returnSomeB)的对象之前,你需要对class Bfirst有一个完整的定义。

因此,只需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,也没有访问任何B的成员),并且指针的大小在编译时间,即使没有class B定义。

于 2013-09-12T15:00:26.877 回答