我很难设置一个包含3个类的结构。我不确定包含/转发声明。
下面的代码编译,直到我在inclino.h中添加命名空间和枚举。我从InclinoMeasure.h收到“inclino尚未声明”
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
// InclinoMeasure.h
#include "InclinoReading.h"
class Inclino;
class InclinoMeasure
{
Inclino *m_inclino;
list<InclinoReading*> m_readings;
void f(inclino::a a);
}
InclinoReading.h
// InclinoReading.h
class Inclino;
class InclinoMeasure;
class InclinoReading
{
InclinoMeasure *m_inclino;
void f(inclino::a a);
}
结构是否正确?如何在其他课程中访问枚举?
提前致谢。
编辑:我通过将其置于包含3个类的新文件中来修复名称空间问题。但似乎我误用了包含/转发声明。
答案 0 :(得分:1)
我从InclinoMeasure.h收到“inclino尚未声明”
这是因为名称空间inclino
和枚举a
目前在Inclino.h
中定义,但InclinoMeasure.h
不包含Inclino.h
(并且不应该,标题之间的当前关系,因为这将引入循环依赖)。 class Inclino
的前向声明与命名空间和枚举无关。
要解决此问题,您可以将命名空间和枚举的定义移至InclinoReading.h
。
这将使其在所有三个标题中都可用,因为Inclino.h
和InclinoMeasure.h
都包含InclinoReading.h
。