加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么在添加带有唯一指针到我的头文件的向量后,我得到:“

发布时间:2020-12-16 10:05:13 所属栏目:百科 来源:网络整理
导读:要学习C,我正在编写游戏.在这个游戏中,可以有两个玩家.那些玩家可以通过套接字相互连接.在向玩家标题添加带有唯一指针的向量后,我收到错误:“错误C2280’std :: unique_ptr :: unique_ptr(const std :: unique_ptr _Ty,std :: default_delete _Ty)’ :尝试
要学习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对象,默认情况下是每个字段的元素复制.您无法复制唯一指针的向量

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读