c – 为什么在添加带有唯一指针到我的头文件的向量后,我得到:“
要学习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对象,默认情况下是每个字段的元素复制.您无法复制唯一指针的向量
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |