C++ 将初始值设定项列表传递给基于向量的构造函数

C++ 将初始值设定项列表传递给基于向量的构造函数,c++,c++11,uniform-initialization,C++,C++11,Uniform Initialization,我目前有以下代码 class test { public: test(std::vector<std::string> str) { } test() { } const std::multimap<int, std::multimap<int, test>> _var= { {0x01, { {

我目前有以下代码

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;
}
类测试
{
公众:
测试(标准::矢量str)
{
}
测试()
{
}
常数std::多重映射_var={
{0x01{
{
0x0f,{“A”、“B”、“C”、“D”}
}
}
}
};   
};
int main()
{  
试验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> >'
         };
         ^
main.cpp:29:9:错误:无法将“{1,{15,{A”,“B”,“C”,“D}”从“”转换为“const std::multimap”
};
^

我想知道为什么将{“A”、“B”、“C”、“D}传递给
std::vector str)
会失败?对我如何解决这个问题有什么建议吗

你需要另一副牙套。使用:

0x0f, {{"A", "B", "C", "D"}}
如果没有这一点,编译器将尝试使用参数
“a”、“B”、“C”、“D”
构造
测试,就像
测试{“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"}
                            }
                         }
                 }
        };   
};
类测试
{
公众:
测试(标准::矢量str)
{
}
测试()
{
}
常数std::多重映射_var={
{0x01{
{
0x0f,std::向量{“A”、“B”、“C”、“D”}
}
}
}
};   
};
然而,您永远不应该按值传递容器

另一种方法是在ctor中使用std::initializer_列表,然后可以将代码编写为:

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"}
                            }
                         }
                 }
        };   
};
类测试
{
公众:
测试(标准::初始值设定项\u列表str)
{
}
测试()
{
}
常数std::多重映射_var={
{0x01{
{
0x0f,{“A”、“B”、“C”、“D”}
}
}
}
};   
};

发生了什么错误?好的,让我更新一下,您有多个用户定义的转换正在进行。通过执行
向量{“A”,“B”,“C”}
@Rajeshwar来修复它,我觉得代码很好。它在我的电脑上运行得很好。从技术上讲,这会导致崩溃。我刚刚发布了一个基于此的新问题