无法从“<brace-enclosed initializer list>”转换为向量
Could not convert from ‘<brace-enclosed initializer list>’ to vector
以下向量声明:
vector<string> valid_escape = {'n', 't', 'r', '0', '\'};
导致错误:
error: could not convert ‘{'n', 't', 'r', '0', '\'}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<std::__cxx11::basic_string<char> >’
关于此问题的其他 SO 帖子得出的结论是它是 4.7 版 gcc 中的错误,或者编译中未提及 -std=c++11
标志。
我的gcc版本是7.3.0,我用上面的flag编译的。
出于好奇和狭隘的希望,我尝试用 list
替换 vector
并得到了类似的错误。
如果你需要 std::vector
个 std::string
由这些字符组成的单个 std::string
初始化,你需要一个额外的大括号初始化器:
vector<string> valid_escape = {{'n', 't', 'r', '0', '\'}};
内括号将用给定的字符初始化一个字符串,外括号将在索引 0 处用该字符串构造一个向量。
如果您想要一个 std::vector
包含几个 std::string
,每个都用一个字符初始化,您需要:
vector<string> valid_escape = {{'n'}, {'t'}, {'r'}, {'0'}, {'\'}};
std::string
容器没有采用单个字符的构造函数,因此需要一个初始化列表。
示例:
string x = 'a'; // not possible, no constructor exists
string x = "a"; // possible, string(const char* s)
string x = {'a'}; // possible, string(initializer_list<char> il)
std::string
对象使用双 "
(双引号)初始化,如 "string"
,而不是双 '
(单引号),如 'n'
试试这个:
std::vector<std::string> valid_escape = {"n", "t", "r", "0", "\"};
您可以使用字符串作为字符的容器:
std::string valid_escape = {'n', 't', 'r', '0', '\'};
以下向量声明:
vector<string> valid_escape = {'n', 't', 'r', '0', '\'};
导致错误:
error: could not convert ‘{'n', 't', 'r', '0', '\'}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<std::__cxx11::basic_string<char> >’
关于此问题的其他 SO 帖子得出的结论是它是 4.7 版 gcc 中的错误,或者编译中未提及 -std=c++11
标志。
我的gcc版本是7.3.0,我用上面的flag编译的。
出于好奇和狭隘的希望,我尝试用 list
替换 vector
并得到了类似的错误。
如果你需要 std::vector
个 std::string
由这些字符组成的单个 std::string
初始化,你需要一个额外的大括号初始化器:
vector<string> valid_escape = {{'n', 't', 'r', '0', '\'}};
内括号将用给定的字符初始化一个字符串,外括号将在索引 0 处用该字符串构造一个向量。
如果您想要一个 std::vector
包含几个 std::string
,每个都用一个字符初始化,您需要:
vector<string> valid_escape = {{'n'}, {'t'}, {'r'}, {'0'}, {'\'}};
std::string
容器没有采用单个字符的构造函数,因此需要一个初始化列表。
示例:
string x = 'a'; // not possible, no constructor exists
string x = "a"; // possible, string(const char* s)
string x = {'a'}; // possible, string(initializer_list<char> il)
std::string
对象使用双 "
(双引号)初始化,如 "string"
,而不是双 '
(单引号),如 'n'
试试这个:
std::vector<std::string> valid_escape = {"n", "t", "r", "0", "\"};
您可以使用字符串作为字符的容器:
std::string valid_escape = {'n', 't', 'r', '0', '\'};