C++ 没有名为'的类型;u16字符串';在命名空间中';std&x27;
我正在使用Qt5.5.0 当我编译一个程序时,它显示“名称空间'std'中没有名为'u16string'的类型”。有趣的是,我过去成功地编译了它,为什么现在失败了?C++ 没有名为'的类型;u16字符串';在命名空间中';std&x27;,c++,qt,C++,Qt,我正在使用Qt5.5.0 当我编译一个程序时,它显示“名称空间'std'中没有名为'u16string'的类型”。有趣的是,我过去成功地编译了它,为什么现在失败了?qstring.h似乎有问题 我怎么修理它?这里是错误发生的地方 #ifndef QSTRING_H #define QSTRING_H #if defined(QT_NO_CAST_FROM_ASCII) && defined(QT_RESTRICTED_CAST_FROM_ASCII) #error QT_N
qstring.h
似乎有问题
我怎么修理它?这里是错误发生的地方
#ifndef QSTRING_H
#define QSTRING_H
#if defined(QT_NO_CAST_FROM_ASCII) && defined(QT_RESTRICTED_CAST_FROM_ASCII)
#error QT_NO_CAST_FROM_ASCII and QT_RESTRICTED_CAST_FROM_ASCII must not be defined at the same time
#endif
#include <QtCore/qchar.h>
#include <QtCore/qbytearray.h>
#include <QtCore/qrefcount.h>
#include <QtCore/qnamespace.h>
#include <string>
#if defined(Q_OS_ANDROID)
// std::wstring is disabled on android's glibc, as bionic lacks certain features
// that libstdc++ checks for (like mbcslen). namespace std { typedef basic_string<wchar_t> wstring; }
#endif
#if defined(Q_COMPILER_UNICODE_STRINGS) || defined(Q_QDOC)
static inline QString fromStdU16String(const std::u16string &s);
inline std::u16string toStdU16String() const;
static inline QString fromStdU32String(const std::u32string &s);
inline std::u32string toStdU32String() const;
#endif
\ifndef QSTRING\H
#定义QSTRING_H
#如果已定义(QT_NO_CAST_FROM_ASCII)和已定义(QT_RESTRICTED_CAST_FROM_ASCII)
#错误QT_NO_CAST_FROM_ASCII和QT_RESTRICTED_CAST_FROM_ASCII不能同时定义
#恩迪夫
#包括
#包括
#包括
#包括
#包括
#如果已定义(Q_OS_ANDROID)
//android的glibc上禁用了std::wstring,因为bionic缺少某些功能
//libstdc++检查(比如mbcslen)。命名空间std{typedef basic_string wstring;}
#恩迪夫
#如果已定义(Q_编译器_UNICODE_字符串)| |已定义(Q_QDOC)
来自stdu16string的静态内联QString(const std::u16string&s);
内联std::u16string toStdU16String()常量;
来自stdu32string的静态内联QString(const std::u32string&s);
内联std::u32string toStdU32String()常量;
#恩迪夫
有趣的是,我过去成功地编译了它,为什么现在失败了
早些时候,您可能会包含一些库的标题,而这些标题又包含
;在一些更新之后,可能会停止直接包含它,从而导致错误
如何修复它
在源代码中包含适当的头以避免此类问题
#include <string>
#包括
在发生错误的位置,确保使用名称空间引用它:
std::u16string
问题出在文件ExpGame.pro中。我删除代码如下:
QMAKE_cxflags+=-std=c++11
这没问题。要修复它:
CONFIG += c++11
如果您发布您的代码,please@PaoloM#如果已定义(Q#编译器"UNICODE"字符串)|已定义(Q#QDOC)STDU16String的静态内联QString(const std::u16string&s);内联std::u16string toStdU16String()常量;来自stdu32string的静态内联QString(const std::u32string&s);内联std::u32string toStdU32String()常量#endif是否包含
?看到更多的代码会很有帮助。也许编辑你的问题而不是把代码作为注释发布。@ MUXMIT2X代码太长,大约有1500个低点。@圣福左,如u16string
的文件中包含#include
这一行正常情况下是可行的,但在胜富的情况下没有帮助。失败发生在Qt库本身的一个名为qstring.h的头文件中。包含在他自己的所有头文件中不会改变任何东西。有趣的是,它包含在错误的头文件中(如复制到问题中的代码所示),但当引用std::u16string(也显示在代码中)时,问题仍然存在。我不确定真正的原因是什么,因为我自己也在努力解决同样的问题。这将删除对C++11的支持,因此您将无法使用任何C++11功能。我觉得这不是一个好的最终解决方案。