0

我有一个名为 Info 的课程。

我尝试创建一个 unique_ptr 向量来保存此类的列表。

该映射包含作为字符串的键和作为值的 unique_ptr。

但是当我尝试从地图中检索值并尝试将其放入向量中以形成列表时,VS2010 编译器会给出错误:错误 C2664: 'void std::vector<_Ty>::push_back(_Ty &&)' :无法将参数 1 从 'std::vector<_Ty>' 转换为 'std::unique_ptr<_Ty> &&'

vector<unique_ptr<Info>> sInfo;
QMap<QString,vector<unique_ptr<Info>>>::Iterator iterMap;
for(iterMap = map_sInfo.begin(); iterMap != map_sInfo.end(); ++iterMap)
{
    vector<unique_ptr<Info>>sValue = iterMap.value();
    sInfo.push_back((sValue)); //error C2664
}

我如何提供有关此方面的任何帮助将不胜感激。

4

1 回答 1

1

正如错误消息所暗示的那样,您正在尝试推回整个 sValue 容器(这是 avector<unique_ptr<Info>>而不是 a unique_ptr<Info>。正如您刚刚注意到的那样,这不太顺利。

你有几个选择。sValue首先,您可以遍历push_back每个元素的内容。其次,您可以使用 std::copy 在一个语句中添加元素:

std::copy(sValue.begin(), sValue.end(), std::back_inserter(sInfo);

第三种选择是使用 std::vector 的insert函数一次性添加整个容器:

sInfo.insert(sInfo.end(), sValue.begin(), sValue.end());
于 2012-12-19T22:40:10.310 回答