Ошибка компилятора в неактивном блоке #ifdef

Я работаю над программой на c ++, которая была скомпилирована с Visual Studio 2013, но должна быть скомпилирована и с Visual Studio 2008, оба в режиме релиза. я использую #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 :: number’: только статические интегральные данные const
члены могут быть инициализированы в классе

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

Любой вклад приветствуется!

0

Решение

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

#if (_MSC_VER == 1500)

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

1

Другие решения

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

0

По вопросам рекламы [email protected]