错误C2280:尝试引用已删除的函数(unique_ptr)

演习

我经历了一些使用原始指针并将其改为unique_ptrs的旧代码现在,当我尝试编译代码时,出现以下错误消息:

错误1错误C2280:'std :: unique_ptr> :: unique_ptr(const std :: unique_ptr <_Ty,std :: default_delete <_Ty >>&)':试图引用已删除的函数d:\ visual studio 2013 \ vc \包括\ xmemory0

有关此情况的编译器输出非常大-为了节省此问题的空间,请在此处查看

据我所知,这与我使用唯一指针的方式有关。它从这里开始(level.h,第65-66行):

typedef std::unique_ptr<Enemy> PEnemy;
std::list<PEnemy> m_enemies;

现在,我在编译器输出中获得的下一个线索是basesource.cpp中的第47行:

std::list<PEnemy> enemies = Game::LEVEL->getEnemies();

为什么这会引起问题?我该如何解决错误?

轨道轻赛

unique_ptr不能复制;只感动!但是由于std::list应该能够在内部移动它们,所以唯一的问题应该是您要对列表本身执行分配。

您可以移动清单吗?

  • std::list<PEnemy> enemies = std::move(Game::LEVEL->getEnemies());

还是改用引用?

  • const std::list<PEnemy>& enemies = Game::LEVEL->getEnemies();

如果没有,那么(这取决于Game::LEVEL->getEnemies()您可以使用上述解决方案中的哪一个的返回类型),您将需要进行深层复制切换为深层复制shared_ptr

这一切似乎都是一个障碍,但实际上,通过严格执行有关指尖所有权的规定,这实际上对您有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

unique_ptr,qvector.resize()引发错误2280,尝试引用已删除的函数

编译器错误C2280,尝试引用已删除的函数运算符=

错误C2280:'QQmlPrivate :: QQmlElement <T> :: QQmlElement(void)':尝试引用已删除的函数

错误C2280:尝试引用已删除的函数(atomic <int>)

C++ 错误 (C2280) 尝试访问已删除的函数

std :: unique_ptr尝试引用已删除的函数

Unique_Ptr:尝试引用已删除的函数

多级继承错误 C2280:“试图引用已删除的函数”

错误 C2280:Class::Class(void):试图引用已删除的函数

具有unique_ptr成员的对象的错误C2280向量

Visual Studio 2013和2015中的C ++编译器错误C2280“试图引用已删除的函数”

C ++错误C2280-尝试引用已删除的函数-在原始类型上

将std :: list <std :: unique_ptr>移至向量尝试引用已删除的函数

C2280:复制构造函数的“尝试引用引用的已删除函数”,CC248“'operator ='无法访问在类中声明的私有成员”(Cocos2dx)

使用已删除的函数unique_ptr

使用Future时获取C2280(试图引用已删除的功能)

对已删除其副本构造函数的对象的向量进行迭代(C2280)

与所有其他编译器一起使用的MSVC错误C2280(试图引用已删除的功能)

删除函数unique_ptr

在移动构造函数中的unique_ptr上调用std :: move时出现“错误:使用已删除的函数”

从向量c ++中删除对象,尝试引用已删除的函数

尝试将对象添加到向量时出现错误C2280

为什么传递带有const引用成员的结构会导致C2280错误?

C ++复制构造函数:尝试引用已删除的函数

奇怪的错误:当未真正创建指针时,使用删除的函数'std :: unique_ptr <_Tp,_Dp> :: unique_ptr

std :: unique_ptr <T []>具有派生对象的数组,使用已删除的函数

合并unique_ptr的两个向量时的“使用已删除函数”

在地图内使用unique_ptr时std :: pair中已删除的函数

C++ 为什么在不使用被删除的函数时编译器失败,错误代码为 C2280