ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 为什么在添加带有唯一指针到我的头文件的向量后,我得到:“尝试引用已删除的函数”错误?

2019-07-27 10:05:34  阅读:260  来源: 互联网

标签:c c11 vector smart-pointers unique-ptr


要学习C,我正在编写游戏.在这个游戏中,可以有两个玩家.那些玩家可以通过套接字相互连接.在向玩家标题添加带有唯一指针的向量后,我收到错误:“错误C2280’std :: unique_ptr> :: unique_ptr(const std :: unique_ptr< _Ty,std :: default_delete< _Ty>>&)’ :尝试引用已删除的函数“.构建向量也有同样的错误.

为了更清楚地了解问题所在,我将头文件设置在下面的代码块中:

class Player {
public:
    Player() {}
    Player(const std::string& name) : _name {name} {}

    std::string get_name() const { return _name; }
    void set_name(const std::string & new_name) { _name = new_name; }

    const bool compare_name(const std::string & name) const;
    void set_coins(const int coins);
    const int get_coins();
    void set_king(const bool king);
    const bool get_king();

private:
    std::string _name;
    int _coins;
    bool _is_king;

    std::vector<std::unique_ptr<Building>> _buildings;
    std::vector<std::unique_ptr<Building>> _placed_buildings;
    std::vector<std::unique_ptr<Character>> _characters;
};

最后三个向量是我试图添加到头文件的向量.我以类似的方式将它们添加到另一个类中.在那堂课中,它没有导致错误.但在我的播放器头文件中,确实如此.你能帮我解决/澄清这个错误吗?

所有帮助将不胜感激.

编辑:试图解释为什么这个问题不重复.

它可能是重复但是现在,据我所知,问题是:“Why can I not push_back a unique_ptr into a vector?”有人试图在不使用push_back中的std :: move的情况下调用push_back函数.目前我并没有试图将值放在我的向量中.我想要的是我的标题内的唯一指针向量.所以我并没有尝试用元素填充向量.因此,我倾向于认为不可能将std :: move用于构建和角色向量.我知道这个错误经常发生在不调用std :: move函数时,因为我已经查看了其他StackOverflow帖子.但他们似乎都没有对我的问题给出正确的答案.因为大多数答案是:使用“std :: move”或使用“默认构造函数”,但这并没有解决我的问题.

我的期望是它与玩家被定义为shared_ptr有关,而玩家是向量的容器可能是问题的一部分吗?

解决方法:

最有可能的是,您正在复制Player对象,默认情况下是每个字段的元素复制.您无法复制唯一指针的向量

标签:c,c11,vector,smart-pointers,unique-ptr
来源: https://codeday.me/bug/20190727/1552949.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有