c++ - 为什么包括原子 - 给出错误

标签 c++

<分区>

我在 ubuntu 64 位 14.04 下使用 g++ (gcc) 4.9.2 版。 我正在尝试编译以下简单代码:

#include <iostream>
#include <atomic>
using namespace std;

int main() {
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    return 0;
}

并得到以下错误:

/usr/include/c++/4.9/atomic:385:56: error: ‘noexcept’ does not name a type
      memory_order __m = memory_order_seq_cst) volatile noexcept
                                                        ^
/usr/include/c++/4.9/atomic:389:53: error: expected ‘;’ at end of member declaration
       load(memory_order __m = memory_order_seq_cst) const noexcept
                                                     ^
/usr/include/c++/4.9/atomic:389:59: error: ‘noexcept’ does not name a type
       load(memory_order __m = memory_order_seq_cst) const noexcept
                                                           ^
/usr/include/c++/4.9/atomic:393:59: error: expected ‘;’ at end of member declaration
       load(memory_order __m = memory_order_seq_cst) const volatile noexcept
                                                           ^
/usr/include/c++/4.9/atomic:393:68: error: ‘noexcept’ does not name a type
       load(memory_order __m = memory_order_seq_cst) const volatile noexcept
                                                                    ^
/usr/include/c++/4.9/atomic:398:48: error: expected ‘;’ at end of member declaration
         memory_order __m = memory_order_seq_cst) noexcept
                                                ^
/usr/include/c++/4.9/atomic:398:50: error: ‘noexcept’ does not name a type
         memory_order __m = memory_order_seq_cst) noexcept

为什么我不能编译这个简单的例子?

最佳答案

查看第一个 错误,而不是最后一个。后面的错误通常是由前面的错误引起的,因此只查看最后的错误是浪费时间,而且无法告诉您根本原因。

第一个错误是:

In file included from /usr/include/c++/4.9/atomic:38:0, from a.cc:2: /usr/include/c++/4.9/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

这应该是显而易见的。你没有告诉编译器你想使用 C++11。

它甚至告诉你如何解决问题:用-std=c++11编译或 -std=gnu++11

注意对于 GCC 5 <atomic> header 已修改,因此您得到那个错误,而不是它之后的所有结果。

关于c++ - 为什么包括原子 - 给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31547005/

相关文章:

c++ - 为什么没有输入,poll 一直返回?

c++ - 调用者是否应该初始化 "out"参数?

C++0x (C++11) 作为函数式语言?

C++ 取消引用 void 指针,将 int ptr 转换为 void ptr

c# - 将 C# 结构的指针传递给 C++ API

C++ 我们应该在 MurmurHash3 参数中传递什么?

c++ - 需要澄清 'reverse (data, data+n)' 在这段代码中做了什么

c++ - 对于 OpenGL 着色器,您将如何在 C++ 中编写接受所有类型的统一函数?

c++ - 用 C++ 计算债券到期 yield (YTM)

c++ - QSharedPointer 或 std::shared_ptr 的生命周期