如何定义相互依赖的类?

时间:2014-09-09 00:06:58

标签: c++ class object

假设我们有一个A类,它将另一个B类作为一个元素;

//ClasA.h
#ifndef _A_HEADER
#define _A_HEADER
#include "ClassB.h"
class B;
class A
{
private:
    B b;
public:
    A();
};
#endif

//ClassA.cpp
#include "ClassA.h"
A::A(){}

现在,我们希望B类有一个指向A类的指针。所以我们将B类定义为:

//ClassB.h
#ifndef _B_HEADER
#define _B_HEADER
#include "ClassA.h"
class A;
class B
{
private:
    A *a;
public:
    B();
};
#endif

//ClassB.cpp
#include "ClassB.h"
B::B(){}

这样,我们将有一个A类,它将包含一个对象B.而对象B将有一个指向A类的指针。不幸的是,这不起作用。我收到以下错误:

-ClassA.h:9:7:错误:字段'b'的类型不完整。 B b;

我该如何解决这个问题?并且,考虑到我修复它,实现这样的系统是否值得?我的意思是,它肯定不会很优雅。

-

1 个答案:

答案 0 :(得分:1)

您必须至少在一个班级使用前瞻声明。

例如:

//ClassB.h
#ifndef _B_HEADER
#define _B_HEADER
class A;
class B
{
private:
    A *a;
public:
    B();
};
#include "ClassA.h"
#endif
  

而且,考虑到我修复它,实现一个系统是否值得   像这样?

这种方法通常没有任何问题,有时候也是必要的。

关于您所看到的具体错误:

  

-ClassA.h:9:7:错误:字段'b'的类型不完整。 B b;

这是因为,在使用前向声明时,您无法声明任何特定于实现的内容。如果您使用B *b;,则可能会收到评论中引用的问题中提到的错误。