非活动的#ifdef块中存在编译器错误
Compiler error in inactive #ifdef block
我正在开发一个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
。
相关文章:
- 为什么我的编译器无法弄清楚这种转换,它何时存在?
- MSVC 中可能存在的编译器错误
- 我正在调试这个C++程序.编译器不再显示语法错误,但存在隐藏的逻辑错误
- 编译器错过了无效的构造函数调用,并调用不存在的(或私有的)默认构造函数
- 如果检查和内联条件之间是否存在编译器差异
- C 编译器未检查模板类中是否存在一种方法
- 相同的代码在不同的 gcc 编译器中存在巨大的性能差异
- 如何将我的控制台应用程序链接到使用 clang++ 作为编译器的 OSX 环境中的 /usr/local/lib 中存在
- C++编译器在封装行为上存在分歧 - 哪一个做对了?
- 哪个编译器(如果有的话)在参数包扩展中存在错误
- 使用clang编译时regex-segfault,可能存在编译器错误
- icc崩溃:编译器能在抽象机器中不存在的地方发明写入吗
- MSVC 编译器实例化函数模板的默认定义,即使存在专用化
- c4930可能存在编译器错误
- 我的iOS金属计算内核是否存在编译器错误,或者我遗漏了什么
- MSVC++中可能存在编译器错误
- VS2010 SP1的函数模板中存在编译器错误
- gcc(Linux/MinGW)是否存在编译器标志,以便在运行时引发除以零的错误
- 可能存在编译器错误,本地结构从模板参数(phew)访问函数中的静态变量
- 非活动的#ifdef块中存在编译器错误