0

この 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 ...]

この質問は、私の構文は正しいが、g++ 4.4 は私がやろうとしていることを正しくまたは完全にサポートしていないことを示唆しています。

このベクトルのベクトルの初期化を達成するための簡単なフォールバック方法は何でしょうか?

4

2 に答える 2

0

この Boost ソリューションを提案してくれた @Dyp に感謝します。

#include <boost/assign/list_of.hpp>
using boost::assign::list_of;

vector< vector< string >> phs2tm_vec =
    list_of< vector< string >>
    ( list_of ("manager_n")   ("manager_a")   ("manager_e")  ("manager_p") )
    ( list_of ("manager_na")  ("manager_ne")  ("manager_np") )
    ( list_of ("manager_ccx") )
    ( list_of ("manager_icx") );
于 2013-09-13T00:06:35.983 に答える