【发布时间】:2020-05-28 18:51:19
【问题描述】:
我想在vector 中的map 中使用unique_ptr。但我收到一条错误消息。
我不确定为什么以及如何解决这个问题。
这是代码。
#include <memory>
int main(int argc, char** argv)
{
std::vector<std::map<int, std::unique_ptr<std::string>>> outputContainers;
std::map<int, std::unique_ptr<std::string>> outputContainer;
outputContainer[0] = std::make_unique<std::string>("test");
outputContainers.push_back(std::move(outputContainer));
}
这是一条错误消息。
Error C2280 'std::pair<const int,std::unique_ptr<std::string,std::default_delete<std::string>>>::pair(const std::pair<const int,std::unique_ptr<std::string,std::default_delete<std::string>>> &)': attempting to reference a deleted function test C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\include\xmemory 671
【问题讨论】:
-
It works for me,只要我添加其他必要的标题。
-
@DanielH 你能告诉我你安装哪个库以及你使用哪个版本的visual studio吗?
-
@DanielH 从视觉上看 G++ 和 CL.EXE 编译器是有区别的。
-
@rafix07 是的,我看到当我切换到那里的最新 MSVC 编译器时,它失败了。看起来它正在尝试调用复制构造函数而不是移动构造函数?我认为这是 MSVC 的一个问题,标准说它应该可以工作,但实际上并没有多大帮助。
-
@rafix07 使用 VS2015,对我来说效果很好。您对哪个版本有问题?
标签: c++11 std visual-studio-2019