类可以互相引用吗?

use*_*028 0 c++ oop

我有一些在同一个文件中按顺序声明的类,但是,我希望它们能够相互引用.但是,类只能由它们之上的类声明.

我可以通过将它们分成不同的.h文件并#include根据需要互相拥有它来实现这一点吗?或者可以在将它们保存在同一文件中的情况下完成>

或者这是不好的做法?

(具体来说,我有一个A类实例需要跟踪不同类型的B类的多个实例,这些实例可能尝试与A类没有特定的顺序进行交互;我需要保持特定于尝试与A类的一个实例化交谈的B类......)

Mik*_*vey 6

只要通过"引用"你的意思是指针,这应该工作:

class Foo;

class Bar {
  Foo* p;
};

class Foo {
  Bar* p;
};
Run Code Online (Sandbox Code Playgroud)

  • 参考也很好. (2认同)

DrY*_*Yap 5

您可以转发声明类,然后在文件中定义它们:

class A;

class B
{
    // As pointed out by syam this will have to be an A* or A& not just of type A.
    // If this line were:
    // A myA
    // The compiler gives error: field ‘myA’ has incomplete type
    A* myA;
};

class A {};
Run Code Online (Sandbox Code Playgroud)

如果您想在任何时候A从方法中访问方法或属性,B那么您必须确保在定义之后定义这些方法A.

class A;

class B
{
    A& myA;
    int getAValue(void); // Can't use myA.value here as value is not declared yet.
};

class A
{
public:
    int value;
};

int B::getAValue(void) {return myA.value;}
Run Code Online (Sandbox Code Playgroud)