将初始化列表传递给基于向量的构造函数
Passing an initializer list to a vector based constructor
我目前有以下代码
class test
{
public:
test(std::vector<std::string> str)
{
}
test()
{
}
const std::multimap<int, std::multimap<int, test>> _var= {
{0x01, {
{
0x0f, {"A", "B", "C", "D"}
}
}
}
};
};
int main()
{
test t;
}
错误:
main.cpp:29:9: error: could not convert '{{1, {{15, {"A", "B", "C", "D"}}}}}' from '<brace-enclosed initializer list>' to 'const std::multimap<int, std::multimap<int, test> >'
};
^
我想知道为什么将 {"A"、"B"、"C"、"D"} 传递给 std::vector<std::string> str)
会失败?关于如何解决此问题的任何建议?
您需要另一副牙套。使用:
0x0f, {{"A", "B", "C", "D"}}
否则,编译器会尝试使用参数 "A", "B", "C", "D"
构造一个 test
,就好像 test{"A", "B", "C", "D"}
一样,这是行不通的。
这会起作用:
class test
{
public:
test(std::vector<std::string> str)
{
}
test()
{
}
const std::multimap<int, std::multimap<int, test>> _var= {
{0x01, {
{
0x0f, std::vector<std::string>{"A", "B", "C", "D"}
}
}
}
};
};
尽管如此,您永远不应按值传递容器。
另一种方法是在你的ctor中使用std::initializer_list,那么你的代码可以写成:
class test
{
public:
test(std::initializer_list<std::string> str)
{
}
test()
{
}
const std::multimap<int, std::multimap<int, test>> _var= {
{0x01, {
{
0x0f, {"A", "B", "C", "D"}
}
}
}
};
};
我目前有以下代码
class test
{
public:
test(std::vector<std::string> str)
{
}
test()
{
}
const std::multimap<int, std::multimap<int, test>> _var= {
{0x01, {
{
0x0f, {"A", "B", "C", "D"}
}
}
}
};
};
int main()
{
test t;
}
错误:
main.cpp:29:9: error: could not convert '{{1, {{15, {"A", "B", "C", "D"}}}}}' from '<brace-enclosed initializer list>' to 'const std::multimap<int, std::multimap<int, test> >'
};
^
我想知道为什么将 {"A"、"B"、"C"、"D"} 传递给 std::vector<std::string> str)
会失败?关于如何解决此问题的任何建议?
您需要另一副牙套。使用:
0x0f, {{"A", "B", "C", "D"}}
否则,编译器会尝试使用参数 "A", "B", "C", "D"
构造一个 test
,就好像 test{"A", "B", "C", "D"}
一样,这是行不通的。
这会起作用:
class test
{
public:
test(std::vector<std::string> str)
{
}
test()
{
}
const std::multimap<int, std::multimap<int, test>> _var= {
{0x01, {
{
0x0f, std::vector<std::string>{"A", "B", "C", "D"}
}
}
}
};
};
尽管如此,您永远不应按值传递容器。
另一种方法是在你的ctor中使用std::initializer_list,那么你的代码可以写成:
class test
{
public:
test(std::initializer_list<std::string> str)
{
}
test()
{
}
const std::multimap<int, std::multimap<int, test>> _var= {
{0x01, {
{
0x0f, {"A", "B", "C", "D"}
}
}
}
};
};