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

Compiler error in inactive #ifdef block

我正在开发一个用 visual studio 2013 编译但也需要用 visual studio 2008 编译的 c++ 程序,两者都处于发布模式。我正在使用 #ifdef 块来添加当时不支持的 functions/features 的替代方案。下面的代码块只是一个例子:

struct someStruct
{
#ifdef _VS2008   // defined in preprocessor definition
    someStruct()
    {
        number = -1;
    }
    int number;
#else
    int number = -1;
#endif
    char* Text;
};

我在 int number = -1.

行收到以下编译器错误

error C2864: 'someStruct::number' : only static const integral data members can be initialized within a class

由于 #else 下的代码块(在本例中为 int number = -1)似乎并且应该处于非活动状态,为什么编译器会生成关于它们的错误?

欢迎任何意见!

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

#if (_MSC_VER == 1500)

这里的1500表示VS2008。版本列表是 here.

已找到解决方案。代码块在一个 DLL 项目中,主项目包括一些从中导出的 headers。我不知道我还必须在主项目中定义 _VS2008