我有2个班,“A”和“B”
#ifndef _A_H__
#define _A_H__
#include "B.h"
class A
{
public:
struct Test
{
int qq;
};
B *b;
};
#endif
#ifndef _B_H__
#define _B_H__
#include "A.h"
class A;
class B
{
public:
A *a;
A::Test* qq;
};
#endif
但是,这无法编译成功。谁可以告诉我A::Test*
如何成为B
答案 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