【问题标题】:Strange errors when using c++11 features in qt creator (mingw 4.8 and qt 5.3)在 qt creator(mingw 4.8 和 qt 5.3)中使用 c++11 功能时出现奇怪的错误
【发布时间】:2015-07-05 08:09:40
【问题描述】:

我想在 qt creator 的项目中使用 c++11。我尝试通过将以下内容之一添加到 .pro 文件来添加 c++11 支持:

 CONFIG += c++11

 QMAKE_CXXFLAGS += -std=c++11

但是它们都不适合我,并且在将这些添加到 .pro 文件后,编译器(mingw 4.8)给了我很多错误,例如:

C:/Qt/Qt5.3.2/Tools/mingw482_32/i686-w64-mingw32/include/c++/cstdint:48:11: 错误:'::int8_t' 尚未声明 使用 ::int8_t; ^

C:/Qt/Qt5.3.2/Tools/mingw482_32/i686-w64-mingw32/include/c++/cstdint:49:11: 错误:'::int16_t' 尚未声明 使用 ::int16_t; ^

C:/Qt/Qt5.3.2/Tools/mingw482_32/i686-w64-mingw32/include/c++/cstdint:50:11: 错误:'::int32_t' 尚未使用 ::int32_t 声明; ^

C:/Qt/Qt5.3.2/Tools/mingw482_32/i686-w64-mingw32/include/c++/cstdint:51:11: 错误:'::int64_t' 尚未声明 使用 ::int64_t; ^

C:/Qt/Qt5.3.2/Tools/mingw482_32/i686-w64-mingw32/include/c++/cstdint:53:11: 错误:'::int_fast8_t' 尚未声明 使用 ::int_fast8_t;

有什么问题??!

【问题讨论】:

    标签: qt c++11 mingw qt-creator mingw32


    【解决方案1】:

    如果您使用cstdint,则必须为这些类型提供using

    插入

    using ::int8_t;
    using ::int16_t;
    using ::int32_t;
    using ::int64_t;
    using ::int_fast8_t;
    

    (以及报告丢失的所有其他内容)到发生这些错误的源文件中。

    关于这个主题的更多信息here

    【讨论】:

    • 投反对票,因为答案是错误的。问题中的引用清楚地表明错误来自<cstdint>,并且恰好来自该标题中相应的using 语句。关于链接的答案; MinGW 拥有<cstdint> 的众多实现之一,其中仅包含 C 标头,污染全局命名空间,然后使用 using 指令提升到 std:: 命名空间。这里的问题是 C-header 以某种方式没有定义这些类型。 6 年后我也遇到了同样的问题,希望能得到这个问题的正确答案。
    【解决方案2】:

    此错误最常见的情况是您将标准库头文件包含在您拥有的命名空间中。 (不要那样做;)

    示例:

    namespace my_space {
       #include <cstdint>
    }
    

    https://godbolt.org/z/bP7TnWP1s

    【讨论】:

      猜你喜欢
      • 2012-03-03
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 2013-05-22
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      相关资源
      最近更新 更多