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

Compiler error in inactive #ifdef block

本文关键字:存在 编译器 错误 #ifdef 非活动      更新时间:2023-10-16

我正在开发一个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