错误“令牌不是预处理器子表达式中的有效二元运算符”

时间:2013-02-02 18:04:40

标签: c++ qt qt5

如果我构建并运行一个项目,基本上是由Mac OS 10.6上的Qt框架生成的存根,我得到这个错误输出:

/Users/home/Qt5.0.1/5.0.1/clang_64/include/QtCore/qisenum.h:53: Error:token is not a valid binary operator in a preprocessor subexpression
#    if __has_extension(is_enum)
    ~~~~~~~~~~~~~~~^

我找不到解决方案,但我读到其他Mac用户似乎也有同样的问题。谁知道如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

this forum post已解决此问题。

这基本上是你的clang版本的问题

答案 1 :(得分:1)

我找到了解决方案。只需复制最新的qisenum.h文件from here并将其替换为clang_64/include/QtCore创建者安装中的Qt文件夹,它就可以正常工作。

答案 2 :(得分:1)

#    if __has_extension(is_enum)
         ~~~~~~~~~~~~~~~^

这是一个名为language extension的Clang feature checking macros。对于Clang来说,他们已经有很长一段时间了。 GCC从GCC 5.0,IIRC开始提供它们。

__has_extension可以作为预处理器宏进行测试。因此,首先测试宏的存在,然后测试该功能:

#if defined(__has_extension)
# if __has_extension(is_enum)
   ...
# endif
#endif

__has_extension(is_enum)必须在单独的一行。

它也适用于包含文件。从Crypto ++项目rdrand.cpp file

# include <immintrin.h> // rdrand, MSC, ICC, and GCC
# if defined(__has_include)
#  if __has_include(<x86intrin.h>)
#   include <x86intrin.h> // rdseed for some compilers, like GCC
#  endif
# endif

答案 3 :(得分:1)

在我的情况下,同样错误的原因是Target Build Settings中的预处理器宏名称包含连字符' - ',类似于TEST-DEBUG = 1。

Xcode build configuration names with hyphens ('-') cause pods build failures