0

Я работаю над программой C++, которая была скомпилирована с visual studio 2013, но ее необходимо скомпилировать с помощью visual studio 2008, как в режиме выпуска. Я использую блоки #ifdef, чтобы добавить альтернативы функциям/функциям, которые тогда не поддерживались. Следующий блок кода только один пример:Ошибка компилятора в неактивном блоке #ifdef

struct someStruct 
{ 
#ifdef _VS2008 // defined in preprocessor definition 
    someStruct() 
    { 
     number = -1; 
    } 
    int number; 
#else 
    int number = -1; 
#endif 
    char* Text; 
}; 

, и я получаю следующее сообщение об ошибке компилятора на линии int number = -1.

ошибка C2864: «someStruct :: номер»: только статический константный интегральный данные элементы могут быть инициализированы в пределах класса

Поскольку кодовые блоки под #else (в данном случае int number = -1) кажется и должен быть неактивным, почему компилятор генерирует ошибки о них?

Любой ввод оценивается!

+0

Потому что '_VS2008', вопреки вашим ожиданиям, не определен. Кстати, если вам нужно поддерживать компилятор pre-C++ 11, не имеет смысла писать двойные реализации каждого ярлыка C++ 11, который вы делаете - вы просто делаете код более трудным для чтения и рискуете иметь две реализации не синхронизированы. –

+0

@MatteoItalia Извините, но я не уточнил это, но '_VS2008' Я фактически определил его в определении препроцессора. Меня попросили использовать ifdefs, и я считаю, что это потому, что это приложение редко используется, и оно обновляется только раз в несколько лет. Наверное, мне просто нужно было быстро справиться с этим. Спасибо за совет, хотя! –

ответ

0

Решение было найдено. Блоки кода находятся в проекте DLL, а основной проект включает в себя некоторые экспортированные заголовки из него. Я не знал, что должен был определить _VS2008 в основном проекте.

1

Вы должны использовать _MSC_VER макрос для обнаружения Визуальная студийной версии:

#if (_MSC_VER == 1500) 

1500 здесь означает VS2008. Список версий: here.

+0

Спасибо за информацию. Я тоже нашел эту запись, но я все еще получаю ошибки. Я обновляю свой вопрос с ошибкой, которую я получаю. –

 Смежные вопросы

  • Нет связанных вопросов^_^