В Visual C ++ (VS 2015) я могу определить управляемое перечисление следующим образом:
public enum class Pet {
Cat,
Dog,
Hamster,
};
и ключевое слово publi c жизненно важно. Без него он не будет рассматривать Pet как управляемое перечисление, и вы не сможете получить доступ к тексту, связанному с членами перечисления, например, с помощью Enum :: GetName.
Однако, если я попробую и объявить перечисление внутри класса, например:
class Construction {
public :
public enum class Fixing {
Nut,
Bolt,
Rivet,
};
};
Я получаю это сообщение об ошибке:
error C3379: 'Construction::Fixing': a nested class cannot have an assembly access specifier as part of its declaration
Если я удалю "publi c" из объявления, например это:
class Construction {
public :
enum class Fixing {
Nut,
Bolt,
Rivet,
};
};
, а затем добавьте следующий код:
int main(array<System::String ^> ^args)
{
array<String^> ^names = Enum::GetNames( Construction::Fixing::typeid );
for ( int i = 0; i < names->Length; ++i ) {
Console::WriteLine( names[ i ] );
}
return 0;
}
, тогда он будет компилироваться без жалоб, но результат не такой, как я мог бы ожидать. Выхода нет вообще. Проникнув глубже, я обнаружил, что Enum :: GetNames возвращает массив нулевой длины. Похоже, компилятор рассматривает исправление как неуправляемое перечисление и использует синтаксис C ++ 11 для «класса перечисления».
Итак, как мне изменить код, чтобы исправление было управляемым перечислением?