两个类相互包含,下一个代码有什么问题?

时间:2014-11-11 09:04:41

标签: c++ class

我有2个班,“A”和“B”

A.H

#ifndef _A_H__
#define _A_H__
#include "B.h"

class A
{
public:
    struct Test 
    {
        int qq;
    };
    B *b;
};
#endif

B.h

#ifndef _B_H__
#define _B_H__
#include "A.h"
class A;
class B
{
public:
    A *a;
    A::Test* qq;
};
#endif

但是,这无法编译成功。谁可以告诉我A::Test*如何成为B

中的成员

2 个答案:

答案 0 :(得分:4)

你有一个循环依赖,头文件A.h需要B.h需要A.h,等等永恒。

打破循环的唯一方法是不在另一个中包含一个头文件。

在您的情况下,头文件B.h确实需要A.h头文件,因为类B使用类A的成员,因此您需要更改该头文件A.h不包含B.h。这很简单,因为类A并没有真正使用或需要了解类B的内容,只有类B存在,所以更改{{1}像这样:

A.h

答案 1 :(得分:-2)

写B.h如下:

#ifndef _B_H__
#define _B_H__

class A;
class B
{
public:
    A *a;
    A::Test* qq;
};
#endif