如何在linux中启用c ++ 11

时间:2014-11-16 05:16:11

标签: c++ linux c++11

我想在c ++中使用unordered_map STL,但是一旦我使用了标题,它就会给我这个错误:

此文件需要支持ISO C ++ 11标准的编译器和库支持。此支持目前是实验性的,必须使用-std = c ++ 11或-std = gnu ++ 11编译器选项启用。

我正在附加我想要运行的代码,如下所示。 (代码上的任何输入也是受欢迎的。谢谢)

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

class Node
{
public:
string a,b;
Node()
{
    a="hello";
    b="world";
}
};


int main ()
{
    unordered_map<Node> mymap;
    Node mynode;
    mymap.insert(mynode);
    std::cout << "myrecipe contains:" << std::endl;
  for (auto& x: mymap)
    std::cout << x.a << ": " << x.b << std::endl;

}

编辑:我使用以下命令使其工作:g ++ -std = c ++ 11 [filename] .cpp

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

您的问题的主要答案:在编译命令中指定-std=c++11

确切地说,哪些C ++ 11功能可用取决于您的GCC版本。以下是两个可能有用的链接:

答案 1 :(得分:1)

第一个选项:

您可以在编译时使用-std=c++11删除错误。

g++ -o binary yourFile.cpp -std=c++11

第二个选项将开发与c ++ 11集成:

您可以使用带有-std=c++11的CXXFLAGS设置的makefile .makefile是一个简单的文本文件,其中包含有关如何编译程序的说明。创建一个名为Makefile的新文件(使用大写字母M)。要自动编译代码,只需在终端中键入make命令即可。您可能必须安装make。

以下是代码:

CXX=clang++
CXXFLAGS=-g -std=c++11 -Wall -pedantic
BIN=prog

SRC=$(wildcard *.cpp)
OBJ=$(SRC:%.cpp=%.o)

all: $(OBJ)
    $(CXX) -o $(BIN) $^

%.o: %.c
    $(CXX) $@ -c $<

clean:
    rm -f *.o
    rm $(BIN)

它假定所有.cpp文件与makefile位于同一目录中。但您可以轻松调整makefile以支持src,包含和构建目录。

答案 2 :(得分:0)

编译:

g++ -o binary source.cpp -std=c++11