我想在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
感谢您的帮助。
答案 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