Я работаю над программой 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
) кажется и должен быть неактивным, почему компилятор генерирует ошибки о них?
Любой ввод оценивается!
Потому что '_VS2008', вопреки вашим ожиданиям, не определен. Кстати, если вам нужно поддерживать компилятор pre-C++ 11, не имеет смысла писать двойные реализации каждого ярлыка C++ 11, который вы делаете - вы просто делаете код более трудным для чтения и рискуете иметь две реализации не синхронизированы. –
@MatteoItalia Извините, но я не уточнил это, но '_VS2008' Я фактически определил его в определении препроцессора. Меня попросили использовать ifdefs, и я считаю, что это потому, что это приложение редко используется, и оно обновляется только раз в несколько лет. Наверное, мне просто нужно было быстро справиться с этим. Спасибо за совет, хотя! –