非活动#ifdef块中的编译器错误

时间:2016-07-23 03:13:30

标签: c++ visual-studio-2008 compiler-errors preprocessor-directive release-mode

我正在开发一个用Visual Studio 2013编译的c ++程序,但是在发布模式下也需要使用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)似乎是并且应该处于非活动状态,为什么编译器会产生错误呢?

感谢任何输入!

2 个答案:

答案 0 :(得分:1)

您应该使用_MSC_VER宏来检测Visual Studio版本:

#if (_MSC_VER == 1500)

1500这里意味着VS2008。版本列表为here

答案 1 :(得分:0)

找到了解决方案。代码块位于DLL项目中,主项目包含一些导出的头文件。我也不知道我必须在主项目中定义_VS2008