Я работаю над программой на 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
) кажется и должен быть неактивным, почему компилятор генерирует ошибки о них?
Любой вклад приветствуется!
Вы должны использовать _MSC_VER
макрос для определения версии Visual Studio:
#if (_MSC_VER == 1500)
1500 здесь означает VS2008. Список версий Вот.
Решение было найдено. Блоки кода находятся в проекте DLL, и основной проект включает в себя некоторые из экспортированных заголовков из него. Я не знал, что должен был определить _VS2008
в основном проекте.