非活动 #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
。
我正在开发一个用 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
。