2010-03-23 65 views
2

从我完成C++开始已经很长时间了,而且我正遇到一些引用对方的类的麻烦。如何声明相互引用的类?

现在,我有这样的事情:

class a 
{ 
    public: 
    a(); 
    bool skeletonfunc(b temp); 
}; 

BH

class b 
{ 
    public: 
    b(); 
    bool skeletonfunc(a temp); 
}; 

由于每一个需要另外一个参考,我发现我做不到一个#包括在顶部彼此,或者我最终在与包括的怪异循环。

那么我怎样才能让a可以使用b,反之亦然,而不会产生周期性的#include问题?

谢谢!

回答

8

你必须使用Forward Declaration

class b; 
class a 
{ 
    public: 
    a(); 
    bool skeletonfunc(b temp); 
} 

然而,在许多情况下,这可以迫使你用你的方法调用或者成员变量的引用或指针工作,因为你可以”在两个类头文件中都有完整的类型。如果必须知道类型的大小,则需要使用引用或指针。但是,如果只需要方法声明,则可以使用该类型。

+1

请确保您注意,您需要参考使用指针或引用任何前瞻性声明的类型,本例所示(B&温度)。 – 2010-03-23 20:56:18

+6

不,原始声明(带有传值语义)将被编译。在方法定义之前,您需要完整的类声明,但不要声明方法签名:'class a; void f(a); class a {}; void f(ax){...'参见http://stackoverflow.com/questions/389957/forward-declaration-of-a-base-class/390124#390124 – 2010-03-23 21:03:33

+0

@大卫:我编辑得更加明确。 – 2010-03-23 21:11:23