В C ++ у меня есть что-то вроде этого:
namespace myNS
{
class A
{
public:
typedef enum A_ENUMS { NONE, ALL } A_ENUMS;
};
}
Я хочу получить доступ к этому typedef, может быть что-то вроде этого:
namespace myNS
{
struct ASettings
{
myNS::A::A_ENUMS myASetting;
}
}
Но я получаю ошибку, что A не объявляет тип. Любая помощь приветствуется.
ОБНОВИТЬ: Спасибо за предложения и помощь. После предложений я обновил код. Я упустил тот факт, что в этом есть также пространство имен. Это работает сейчас.
Ваше объявление typedef / enum является частным. Сделайте его общедоступным, и вы сможете получить к нему доступ за пределами класса.
class A {
public:
typedef enum A_ENUMS { NONE, ALL } A_ENUMS;
};
В классах C ++ доступ по умолчанию является закрытым, поэтому ваш тип не доступен из структуры. использование
class A
{
public:
typedef enum A_ENUMS { NONE, ALL } A_ENUMS;
};
Однако C ++ — это не C, и вам не нужно использовать typedefs так, как это обычно делается в C. Попробуйте:
class A
{
public:
enum A_ENUMS { NONE, ALL };
};
Он будет работать так же без лишних элементов.
Вы делаете 2 ошибки:
Ваш код после исправлений:
class A
{
public:
typedef enum { NONE, ALL } A_ENUMS;
};
struct ASettings
{
A::A_ENUMS myASetting;
};
int
main()
{
}
Если у вас есть нормальная поддержка C ++ 11, вы можете переписать перечисление с областью видимости следующим образом:
typedef enum class A
{
NONE, ALL
} A;
Приветствия.
Смотрите обновленный раздел выше. Пространство имен должно быть включено.