当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么在添加带有唯一指针到我的头文件的向量后,我得到:"尝试引用已删除的函数"错误?》经验,为你挑选了1个好方法。

为了学习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> _buildings;
    std::vector> _placed_buildings;
    std::vector> _characters;
};

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

所有帮助将不胜感激.


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

它可能是重复的,但就目前而言,就我所知,问题是:" 为什么我不能将unique_ptr推送回向量?"有人试图在不使用push_back中的std :: move的情况下调用push_back函数.目前我并没有尝试将值放在我的向量中.我想要的是我标题内的一个独特指针向量.所以我是我没有尝试用元素填充向量.因此我倾向于认为不可能使用std :: move作为构建和角色向量.我知道这个错误经常发生在不调用std :: move时函数,因为我已经查看了其他StackOverflow帖子.但是他们似乎没有对我的问题有正确的答案.因为大多数答案是:使用"std :: move"或使用"默认构造函数"没解决我的问题.

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



1> Archie..:

如果类中没有定义复制构造函数,编译器将提供默认构造函数(以及赋值运算符).此默认复制构造函数将尝试复制类成员,包括此情况下的唯一指针向量.

必须使类明确不可复制:

Player(const Player&) = delete;
Player& operator =(const Player&) = delete;

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有