我有困难建立一个有3个类的结构。我不确定包含/转发声明。
下面的代码一直在编译,直到我在inclino.h中添加名称空间和枚举。我从Inclinomeasure.h收到“Inclino尚未声明”。
倾斜度。h
// Inclino.h
#include "InclinoMeasure.h"
#include "InclinoReading.h"
namespace inclino {
enum a{a1, a2}
}
class Inclino
{
list<InclinoMeasure*> m_measures;
void f(inclino::a a);
}
倾斜度
// InclinoMeasure.h
#include "InclinoReading.h"
class Inclino;
class InclinoMeasure
{
Inclino *m_inclino;
list<InclinoReading*> m_readings;
void f(inclino::a a);
}
倾角读数.h
// InclinoReading.h
class Inclino;
class InclinoMeasure;
class InclinoReading
{
InclinoMeasure *m_inclino;
void f(inclino::a a);
}
结构正确吗?如何访问其他类中的枚举?
提前道谢。
编辑:我修复了名称空间的问题,把它放在一个新的文件,包括由3类。但我似乎误用了include/forward声明。
我从Inclinomeasure.h收到“Inclino尚未声明”。
这是因为名称空间inclino
和枚举a
当前是在inclino.h
中定义的,但是inclino.h
不包括inclino.h
(鉴于标头之间的当前关系,也不应该包括inclino.h
,因为这会引入循环依赖关系)。类clinkino
的前向声明与命名空间和枚举无关。
若要解决此问题,可以将命名空间和枚举的定义移动到inclinoreading.h
。
这将使它在使用它的所有三个头中都可用,因为Inclino.h
和InclinoMeasure.h
都包含InclinoReading.h
。