0
#pragma message("MAP_ENGINE=" BOOST_PP_STRINGIZE(MAP_ENGINE))
#if MAP_ENGINE == CE4
    Type4 x = new Type4();
#elif MAP_ENGINE == CE5
    Type5 x = new Type5();
#endif

此代码应该x根据预处理器值创建不同类型的 var。我MAP_ENGINE在Visual C++项目设置中设置:

在此处输入图像描述

但是 CE4 代码仍然编译,我得到一个错误。我添加了#pragma检查值是否设置:

1>MAP_ENGINE=CE5
1>.\MyFile.cpp(141) : error C2039: 'Type4 ' : undeclared identifier

这一定是愚蠢的,但我看不到!在项目设置中定义它是否意味着 CE4/CE5 实际上并不是一个定义的值?

4

1 回答 1

0

预处理器 == 运算符仅执行整数运算(不扩展为看起来像整数的宏被认为具有值 0)。它不能用于比较字符串。

使它像这样:

#if defined(MAP_ENGINE_CE4)
// ...
#elif defined(MAP_ENGINE_CE5)
// ...
#else
  #error Exactly one of MAP_ENGINE_CE4 and MAP_ENGINE_CE5 must be defined
#endif
于 2013-09-12T16:02:51.220 回答