基于Qt 5.15的项目中nullptr被错误解析为int的问题求助
针对ArchLinux下Qt 5.15.8编译时nullptr被解析为int的解决方案
1. 强制启用C++11及以上编译标准
nullptr是C++11引入的特性,部分编译器默认标准过低会将其错误解析为int:
- 若为CMake项目,在
CMakeLists.txt中添加:set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) - 若为qmake项目,在
.pro文件中添加:CONFIG += c++11
2. 修复qhashfunctions.h中的类型转换问题
修改Qt头文件中qHash函数的实现,显式约束nullptr的类型:
Q_DECL_CONST_FUNCTION inline uint qHash(std::nullptr_t, uint seed = 0) Q_DECL_NOTHROW { // 显式转换为std::nullptr_t后再强转 return qHash(reinterpret_cast<quintptr>(static_cast<std::nullptr_t>(nullptr)), seed); }
或者直接使用0替代nullptr(逻辑等价):
Q_DECL_CONST_FUNCTION inline uint qHash(std::nullptr_t, uint seed = 0) Q_DECL_NOTHROW { return qHash(static_cast<quintptr>(0), seed); }
3. 修正std_thread.h中的变量类型声明
将auto __depend = nullptr;修改为显式函数指针类型声明:
void (*__depend)() = nullptr;
避免编译器错误推导为int类型。
4. 排查编译器禁用nullptr的异常参数
检查Qt Creator的编译命令(项目 -> 构建步骤 -> 编译器输出),确保没有添加-fno-nullptr(GCC)或-fno-cxx-nullptr(Clang)这类禁用nullptr特性的参数,如有则删除。
内容的提问来源于stack exchange,提问作者Viktoriia Pashchenko
相关产品推荐
相关产品推荐

