0

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

我可以通过将它们分成不同的 .h 文件并#include根据需要将它们相互保存来做到这一点吗?或者可以在将它们保存在同一个文件中的同时做到这一点>

或者这是不好的做法?

(具体来说,我有一个类 A 的实例,它需要跟踪不同类类型的 B 类的多个实例,这些实例可能会尝试以无特定顺序与类 A 交互;我需要保持特定于试图与 A 类的 ONE 实例对话的 B 类...)

4

5 回答 5

6

只要“引用”你的意思是指针,这应该有效:

class Foo;

class Bar {
  Foo* p;
};

class Foo {
  Bar* p;
};
于 2013-05-07T18:21:44.790 回答
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 {};

如果在任何时候你想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;}
于 2013-05-07T18:21:30.463 回答
0
于 2013-05-07T18:34:51.167 回答
0

您可以使用前向声明。

于 2013-05-07T18:22:19.783 回答
0

你甚至可以引入一个自引用指针:

class Foo {
    Foo* parent;
};
于 2013-05-07T18:30:39.857 回答