命名空间'std'中没有名为'u16string'的类型

时间:2015-07-17 08:19:34

标签: c++ qt

我正在使用QT 5.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_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 

3 个答案:

答案 0 :(得分:7)

修复它:

  1. 因为Mac上的Qt是由clang构建的,所以&#34; Qt Creator&#34; - &GT; &#34;设定&#34; - &GT; &#34;套件&#34;,你应该设置&#34;编译器&#34;铿锵。

  2. 而不是写&#34; QMAKE_CXXFLAGS + = -std = c ++ 11&#34;,将以下配置添加到.pro文件中:

    CONFIG += c++11
    
  3. https://forum.qt.io/topic/56064/solved-problem-with-qt-5-5/11

答案 1 :(得分:0)

  

有趣的是,我过去成功编译了它,为什么它现在失败了?

之前你会包含一些图书馆的标题,其中包含<string>;这个,经过一些更新后,可能会停止直接包含它,从而导致错误。

  

如何解决?

在源代码中包含正确的标题,以避免出现这类问题。

#include <string>
发生错误的translation unit中的

并确保您使用命名空间引用它:std::u16string

答案 2 :(得分:-1)

问题出在文件ExpGame.pro.I中,删除代码如下:

QMAKE_CXXFLAGS + = -std = c ++ 11

没关系。