错误"token is not a valid binary operator in a preprocessor subexpression"
Error "token is not a valid binary operator in a preprocessor subexpression"
如果我构建并运行一个项目,基本上是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用户似乎也有同样的问题。有人知道如何解决这个问题吗?
我已经找到了解决方案。只需从这里复制最新的 qisenum.h 文件并将其替换到Qt
创建器安装clang_64/include/QtCore
文件夹中,它就可以正常工作。
此问题已在此论坛帖子中解决。
这基本上是你的 clang 版本的问题
# if __has_extension(is_enum) ~~~~~~~~~~~~~~~^
这是一个称为功能检查宏的 Clang 语言扩展。他们已经为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 文件:
# 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
在我的情况下,相同错误的原因是目标构建设置中的预处理器宏名称包含连字符符号"-",类似于 TEST-DEBUG=1。
带有连字符 ('-') 的 Xcode 构建配置名称会导致 Pod 构建失败
我的情况是:
#define USE_LIBICONV 1 # xxxxxx
错误
Token is not a valid binary operator in a preprocessor subexpression
溶液:
删除#define
后的拼写错误注释
=> 将#
更改为//
#define USE_LIBICONV 1 // xxxxxx
那么可以正常使用宏:
#if USE_LIBICONV
...
#endif
相关文章:
- netcat command in c++
- Difference in displaying cv2 Mat
- C++ MFC Libraries in Travis CI
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 为什么 std::optional::operator=(U&&) 要求你是非标量类型?
- 'operator='已弃用:改用 QDir::setPath()
- 过载'operator new'如何导致无限循环?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 有人安装"IITB Simplecpp in mac"吗?
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- "no match for ‘operator>>’ in ‘inputFile >> buffer"错误?
- 如何修复" no match for 'operator<<' in 'std::cout"错误?
- void* in malloc vs operator new
- "no match for operator->* in pos ->* op"
- what does ++operator do in this void uart_puts(unsigned char
- error: no match for 'operator>>' in 'in &g
- 创建用户数据库错误"no match for 'operator==' in....." --C++
- 错误"token is not a valid binary operator in a preprocessor subexpression"