Ciclic类在另一个类中使用

Ciclic class use inside another class

本文关键字:另一个 Ciclic      更新时间:2023-10-16

>我在一个 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;
  }
};

这两个类的这种巧妙使用,一个在另一个类中,会产生各种错误,例如

错误

C2143:语法错误:在"*"之前缺少";"

如何在不为每个类创建单独的文件并仅使用一个 cpp 文件的情况下解决此 ciclic 包含问题?

我试图在定义无法正常工作之前添加一个class B;声明class A

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

因此,只需从class A定义中提取returnSomeB体,并将其放在已知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定义。

相关文章: