#c #enums #typedef
#c #перечисления #typedef
Вопрос:
Учитывая следующее:
namespace otherns
{
enum MyEnum_e { MyEnum_YES, MyEnum_NO };
}
namespace myns
{
typedef otherns::MyEnum_e MyEnum_e;
}
Почему следующее недопустимо?
int e = myns::MyEnum_YES;
Я получаю ошибку компилятора с указанием:
'MyEnum_YES' is not a member of 'myns'
Ответ №1:
Поскольку значения перечисления находятся в пространстве имен otherns
, а не в качестве дочернего элемента MyEnum_e
: для ссылки MyEnum_YES
вы вводите otherns::MyEnum_YES
.
Вы могли бы попробовать это:
namespace otherns
{
namespace MyEnum_e_space {
enum MyEnum_e { MyEnum_YES, MyEnum_NO };
}
using namespace MyEnum_e_space;
}
namespace myns
{
using namespace otherns::MyEnum_e_space;
}
Хотя использование using
не рекомендуется..
Комментарии:
1. Это не рекомендуется, просто используйте его разумно; эмпирическое правило таково: не в файлах заголовков (потому что вы не хотите загрязнять пространство имен или даже конфликтовать с разрешением символов для любого нечетного будущего клиента файла заголовков). Не стесняйтесь использовать
using
в своих собственных блоках компиляции