无法从"<大括号括起来的初始值设定项列表>"转换为矢量



以下向量声明:

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 帖子得出的结论是,这是 gcc 4.7 版本中的错误,或者在编译中没有提到-std=c++11标志。

我的 gcc 版本是 7.3.0,我用上面的标志编译。

只是出于好奇和狭隘的希望,我试图用list替换vector,并得到了类似的错误。

如果您需要使用这些字符组成的单个std::string初始化std::stringstd::vector,则需要一个额外的大括号初始值设定项:

vector<string> valid_escape = {{'n', 't', 'r', '0', '\'}};

内大括号将使用给定字符初始化字符串,外大括号将使用索引 0 处的字符串构造一个向量。

如果你想要一个包含多个std::stringstd::vector,每个都用一个字符初始化

,你需要:
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', '\'};

最新更新