0

我正在使用visual studio 2013编译的C++程序,但需要使用visual studio 2008进行编译,无论是在发布模式下。我正在使用#ifdef块来添加当时不支持的功能/功能的替代方案。下面的代码块只是一个例子:编译时错误处于非活动状态#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 ::号码”:只有静态常量积分数据 成员可以一类

由于#else下的代码块中被初始化(在这种情况下int number = -1)似乎是并且应该是不活动的,为什么编译器会产生关于它们的错误?

任何输入赞赏!

+0

因为'_VS2008',与您的期望相反,没有定义。顺便说一句,如果你必须支持一个C++ 11之前的编译器,那么编写每个C++ 11快捷方式的双重实现就没什么意义了 - 你只是让代码更难阅读和冒险去拥有两个实现不同步。 –

+0

@MatteoItalia对不起,我没有澄清这一点,但'_VS2008'我实际上在预处理器定义中定义它。我被要求使用ifdefs,我相信这是因为这个应用程序很少被使用,它每隔几年才更新一次。我想我只能快速解决这个问题。感谢您的建议,但! –

回答

0

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

1

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

#if (_MSC_VER == 1500) 

1500在这里是指VS2008。版本列表是here

+0

感谢您的信息。我其实也发现了这篇文章,但我仍然收到错误。我将用我收到的错误更新我的问题。 –

相关问题