我正在开发一个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;
};
并且我在CCD_ 2行上得到以下编译器错误。
错误C2864:"someStruct::number":仅静态常量积分数据成员可以在类中初始化
既然#else
(在本例中为int number = -1
)下的代码块看起来是并且应该是非活动的,那么编译器为什么会生成关于它们的错误呢?
欢迎您提供任何意见!
您应该使用_MSC_VER
宏来检测Visual Studio版本:
#if (_MSC_VER == 1500)
这里的1500表示VS2008。版本列表在这里。
找到了解决方案。代码块在一个DLL项目中,主项目包括一些从中导出的头。我不知道我也必须在主项目中定义_VS2008
。