我正在使用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
)似乎是并且应该是不活动的,为什么编译器会产生关于它们的错误?
任何输入赞赏!
因为'_VS2008',与您的期望相反,没有定义。顺便说一句,如果你必须支持一个C++ 11之前的编译器,那么编写每个C++ 11快捷方式的双重实现就没什么意义了 - 你只是让代码更难阅读和冒险去拥有两个实现不同步。 –
@MatteoItalia对不起,我没有澄清这一点,但'_VS2008'我实际上在预处理器定义中定义它。我被要求使用ifdefs,我相信这是因为这个应用程序很少被使用,它每隔几年才更新一次。我想我只能快速解决这个问题。感谢您的建议,但! –