如何声明相互引用的类?
Posted
技术标签:
【中文标题】如何声明相互引用的类?【英文标题】:How can I declare classes that refer to each other? 【发布时间】:2010-03-23 20:52:34 【问题描述】:自从我完成 C++ 以来已经有很长时间了,我在类相互引用方面遇到了一些麻烦。
现在我有类似的东西:
啊。
class a
public:
a();
bool skeletonfunc(b temp);
;
b.h
class b
public:
b();
bool skeletonfunc(a temp);
;
由于每个人都需要对另一个人的引用,我发现我不能在顶部执行彼此的#include,否则我最终会陷入带有包含的奇怪循环。
那么我怎样才能使a
可以使用b
并且反之亦然,而不会产生周期性的#include 问题?
谢谢!
【问题讨论】:
【参考方案1】:你必须使用Forward Declaration:
啊。
class b;
class a
public:
a();
bool skeletonfunc(b temp);
但是,在许多情况下,这可能会迫使您在方法调用或成员变量中使用引用或指针,因为您不能在两个类头中都有完整的类型。如果必须知道类型的大小,则需要使用引用或指针。但是,如果只需要方法声明,则可以使用该类型。
【讨论】:
确保您注意到您需要使用指针或引用来引用任何前向声明的类型,如本示例所示 (b& temp)。 不,原始声明(具有传递值语义)将编译。您需要在方法定义之前进行完整的类声明,但不需要声明方法签名:class a; void f( a ); class a ; void f(a x) ...
参见 ***.com/questions/389957/…【参考方案2】:
使用前向声明:http://en.wikipedia.org/wiki/Forward_declaration
【讨论】:
以上是关于如何声明相互引用的类?的主要内容,如果未能解决你的问题,请参考以下文章