C++ 错误C2280:尝试引用已删除的函数(唯一\u ptr)

C++ 错误C2280:尝试引用已删除的函数(唯一\u ptr),c++,c++11,C++,C++11,我浏览了一些使用原始指针的旧代码,并将它们改为unique\u ptrs。现在,当我尝试编译代码时,我得到以下错误消息: 错误1错误C2280:'std::unique\u ptr>::unique\u ptr(const std::unique\u ptr&'):尝试引用已删除的函数d:\visual studio 2013\vc\include\xmemory0 关于这种情况的编译器输出是巨大的——为了节省这个问题中的空间,请参见 据我所知,这与我使用独特指针的方式有关。从这里开始(h层,第

我浏览了一些使用原始指针的旧代码,并将它们改为
unique\u ptr
s。现在,当我尝试编译代码时,我得到以下错误消息:

错误1错误C2280:'std::unique\u ptr>::unique\u ptr(const std::unique\u ptr&'):尝试引用已删除的函数d:\visual studio 2013\vc\include\xmemory0

关于这种情况的编译器输出是巨大的——为了节省这个问题中的空间,请参见

据我所知,这与我使用独特指针的方式有关。从这里开始(h层,第65-66行):

typedef std::unique_ptr PEnemy;
列出你的敌人;
现在,我在编译器输出中得到的下一条线索是basesource.cpp中的第47行:

std::list<PEnemy> enemies = Game::LEVEL->getEnemies();
std::列出敌人=游戏::关卡->获取敌人();

为什么会产生问题?如何修复错误?

unique\u ptr
s无法复制;只动了!但是由于
std::list
应该能够在内部移动它们,所以您唯一的问题应该是您对列表本身执行的赋值

你能移动一下名单吗

  • std::列出敌人=std::移动(游戏::关卡->获取敌人()
或者使用对它的引用

  • const std::list&buzzers=Game::LEVEL->getbuzzers()
如果不是(这取决于
Game::LEVEL->getfriends()
的返回类型,如果可以使用上述解决方案中的任何一种,则需要执行深度复制或切换到
shared\ptr


这一切似乎是一个障碍,但它实际上是在帮你一个忙,严格执行关于指针对象所有权的规则。

错误提醒你,
std::unique\u ptr
是不可复制的。嗯,我还以为我使用的是std::list的引用-get仇敌()正在返回
const std::list&
。这不产生常量引用吗?还是我在这里完全迷路了?@manabreak:
const std::list&*
无效!没有指向引用的指针。即使您要返回
const std::list&
,您仍然会删除引用,并尝试通过将其分配给一个全新的列表(称为
)来复制该列表。也许
const std::list&friends=Game::LEVEL->getfriends()
能帮到你吗?星号是一个输入错误,我修正了它,但你已经偷偷溜过去了P
std::list<PEnemy> enemies = Game::LEVEL->getEnemies();