【发布时间】:2013-09-12 22:08:21
【问题描述】:
我想按如下方式初始化这个vector-of-vector-of-strings,使用g++ 4.4.7编译(由于运营政策,我不能使用更新的版本。)
vector<vector<string>> phs2tm_vec {
{ "manager_n", "manager_a", "manager_e", "manager_p" },
{ "manager_na", "manager_ne", "manager_np" },
{ "manager_ccx" },
{ "manager_icx" }
};
用g++ -std=gnu++0x编译,失败如下:
error: no matching function for call to 'std::vector<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::allocator<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::vector(<brace-enclosed initializer list>)'
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_vector.h:271: note: candidates are: std::vector<_Tp, _Alloc>::vector(std::initializer_list<_Tp>, const _Alloc&) [with _Tp = std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, _Alloc = std::allocator<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >]
[additional candidates not listed ...]
This question 表明我的语法是正确的,但 g++ 4.4 不能正确或完全支持我正在尝试做的事情。
什么是完成这个向量的向量初始化的简单后备方法?
【问题讨论】:
-
boost::assign的list_of怎么样? -
向量是容器,不是容器适配器。
-
“没有匹配的调用函数”不是链接器错误。这是一个简单的编译器错误。
-
删除
.to_adaptor()编译;无法嵌套:vector< vector< string >> vvs = (list_of(list_of ( "a") ( "b") ( "C") ),list_of ( "d") ( "e"));(和其他人) -
是的,对不起。这是实际编译的代码:
std::vector<std::vector<int> > vvi = list_of<std::vector<int> >(list_of(1)(2))(list_of(3)(4));
标签: c++ c++11 g++ list-initialization