现在,我的项目有两个类和一个主。由于这两个类彼此继承,因此它们都使用前向声明。在第一个对象中,在#include语句的正下方,我在类定义之前初始化了两个枚举。我可以在这个类中使用这两个枚举。但是,如果我尝试在继承自第一个类的其他类中使用这些枚举,则会收到一条错误,指出枚举尚未声明。如果我尝试重新定义第二类中的枚举,我会得到重定义错误。
我甚至尝试过使用我刚才读到的技巧,并将每个枚举放在自己的命名空间中;这并没有改变什么。
以下是一个例子:
#ifndef CLASSONE_H
#define CLASSONE_H
namespace Player
{
enum Enum
{
One,
Two,
};
}
#endif
然后在第二个类中,我尝试使用前面声明的枚举:
void AddPlayer(Player::Enum playerNumber);
而是收到一条错误,说“玩家”尚未宣布。
答案 0 :(得分:4)
我不确定在没有看到您的代码的情况下您遇到了什么问题,但这会编译:
enum OutsideEnum
{
OE_1,
OE_2,
};
namespace ns
{
enum NSEnum
{
NE_1,
NE_2,
};
}
class Base
{
public:
enum BaseEnum
{
BE_1,
BE_2,
};
void BaseFunc();
};
class Derived
{
public:
enum DerivedEnum
{
DE_1,
DE_2,
};
void DerivedFunc();
};
void Base::BaseFunc()
{
BaseEnum be = BE_1;
Derived::DerivedEnum de = Derived::DE_1;
OutsideEnum oe = OE_1;
ns::NEEnum ne = ns::NE_1;
}
void Derived::DerivedFunc()
{
Base::BaseEnum be = Base::BE_1;
DerivedEnum de = DE_1;
OutsideEnum oe = OE_1;
ns::NEEnum ne = ns::NE_1;
}
int main()
{
Base::BaseEnum be = Base::BE_1;
Derived::DerivedEnum de = Derived::DE_1;
OutsideEnum oe = OE_1;
ns::NEEnum ne = ns::NE_1;
}
在类定义中定义的枚举需要注意两件事:
编辑:
好的,问题与枚举无关,而是包含顺序,当你有基类和派生类时,只有派生类需要知道基类:
基类标题:
#ifndef BASE_H
#define BASE_H
enum BaseEnum
{
};
class Base
{
};
#endif
派生类标题:
#ifndef DERIVED_H
#define DERIVED_H
#include "Base.h"
class Derived
{
void Func(BaseEnum be);
};
#endif