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();