Использование перечисления typedef вне класса, который был объявлен внутри класса

В 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 не объявляет тип. Любая помощь приветствуется.

ОБНОВИТЬ: Спасибо за предложения и помощь. После предложений я обновил код. Я упустил тот факт, что в этом есть также пространство имен. Это работает сейчас.

-4

Решение

Ваше объявление typedef / enum является частным. Сделайте его общедоступным, и вы сможете получить к нему доступ за пределами класса.

class A {
public:
typedef enum A_ENUMS { NONE, ALL } A_ENUMS;
};
2

Другие решения

В классах C ++ доступ по умолчанию является закрытым, поэтому ваш тип не доступен из структуры. использование

class A
{
public:
typedef enum A_ENUMS { NONE, ALL } A_ENUMS;
};

Однако C ++ — это не C, и вам не нужно использовать typedefs так, как это обычно делается в C. Попробуйте:

class A
{
public:
enum A_ENUMS { NONE, ALL };
};

Он будет работать так же без лишних элементов.

1

Вы делаете 2 ошибки:

  1. typdef! = typedef (опечатка)
  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;

Приветствия.

1

Смотрите обновленный раздел выше. Пространство имен должно быть включено.

0
По вопросам рекламы [email protected]