Одно из моих заданий требует, чтобы мой код компилировался без ошибок на Borland Turbo C ++. Проблема в том, что у меня есть класс OAConfiguration который содержит перечисление:
enum HBLOCK_TYPE{hbNone, hbBasic, hbExtended, hbExternal};
В моем коде я реализую функцию AllocateBlock функция для ObjectAllocator класс, где у меня есть такое утверждение:
if (OAConfig::HBLOCK_TYPE::hbExternal)
Хотя в VS это работает нормально, Борланд говорит, что «это не имя класса или пространства имен в ObjectAllocator :: AllocateBlock (void *)»
Может ли кто-нибудь указать правильный синтаксис, я не могу найти аналогичные проблемы в другом месте.
Borland прав в этом отношении: нельзя перечислить счетчиков по имени перечисления. Visual Studio поддерживает это только как расширение. Правильный код будет выглядеть так:
if (OAConfig::hbExternal)
В C ++ 11 новый тип enum class
был добавлен в язык. Это обеспечивает доступ к области (и только доступ к области), но также не поддерживает неявное преобразование с int
,
Других решений пока нет …