Я не уверен, какая у вас проблема, не видя ваш код, но это компилируется:
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;
}
Две вещи, на которые нужно обратить внимание с перечислениями, определенными внутри определения класса:
- Убедитесь, что он объявлен общедоступным, если вы хотите, чтобы он был общедоступным.
- При обращении к нему из любого места, кроме класса, в котором он определен, используйте имя класса для определения имени перечисления и значений.
EDIT:
Хорошо, проблема не имеет ничего общего с перечислениями, а скорее с порядком включения, когда у вас есть базовый класс и производный класс, только базовый класс должен знать о базовом классе:
Заголовок базового класса:
#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