我正在尝试填充 std::map
,但出现 2 个编译器错误,我不知道是什么原因。
std::map<std::string, std::string> dirFull;
dirFull["no"] = "north";
dirFull["so"] = "south";
dirFull["ea"] = "east";
dirFull["we"] = "west";
dirFull["nw"] = "north-west";
dirFull["ne"] = "north-east";
dirFull["sw"] = "south-west";
dirFull["se"] = "south-east";
这些是错误:
error: C++ requires a type specifier for all declarations
dirFull["no"] = "north";
^
error: size of array has non-integer type 'const char[3]'
dirFull["no"] = "north";
^~~~
我也试过这个:
std::map<std::string, std::string> dirFull = {
{"no", "north"}, {"so", "south"},
{"ea", "east"}, {"we", "west"},
{"ne", "north-east"}, {"nw", "north-west"},
{"se", "south-east"}, {"sw","south-west"} };
这会导致完全不同类型的错误:
error: non-aggregate type 'std::map<std::string, std::string>' (aka '...') cannot be initialized with an initializer list
std::map<std::string, std::string> dirFull = {
^ ~
最佳答案
您收到此错误是因为您试图在文件范围内执行语句。在函数中定义这些赋值,您将不会再遇到这些错误。
如果您想在静态初始化期间填充此map
,您可以使用boost::assign
或 初始化语法来做到这一点。constexpr
//requires c++11:
const map <string,string> dirFull = {
{"no", "north"},
{"so", "south"},
{"ea", "east"},
{"we", "west"},
{"nw", "north-west"},
{"ne", "north-east"},
{"sw", "south-west"},
{"se", "south-east"},
};
关于c++ - std::map - C++ 需要所有声明的类型说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36323991/