【发布时间】:2012-03-25 23:19:35
【问题描述】:
我正在尝试以与Bjarne Stroustrup's C++11 FAQ 中的示例等效的方式初始化std::vector<std::unique_ptr<std::string>>:
using namespace std;
vector<unique_ptr<string>> vs { new string{"Doug"}, new string{"Adams"} }; // fails
unique_ptr<string> ps { new string{"42"} }; // OK
我看不出这种语法为什么会失败。这种初始化容器的方式有问题吗?
编译器错误信息很大;我找到的相关部分如下:
/usr/lib/gcc-snapshot/lib/gcc/i686-linux-gnu/4.7.0/../../../../include/c++/4.7.0 /bits/stl_construct.h:77:7:错误:没有匹配的函数调用
'std::unique_ptr<std::basic_string<char> >::unique_ptr(std::basic_string<char>&)'
有什么方法可以解决这个错误?
【问题讨论】:
-
它正在拾取输入迭代器 ctor
-
@PlasmaHH 在我的实际代码中,初始化列表中有很多条目,所以我不认为这是问题所在。
-
@juanchopanza:这是您在此处粘贴的代码中的问题,您可以通过追溯实例化跟踪轻松查看。当然,我们不能对你没有在这里展示的代码说什么。
-
@PlasmaHH 这很合理。粘贴的代码是我引用的 C++11 FAQ 中的示例。但是,如果我删除 unique_ptrs 并使用裸字符串指针,则两个参数初始化器列表可以正常工作。
标签: c++ compiler-errors initialization c++11