use*_*161 3 c++ smart-pointers vector unique-ptr c++11
为了学习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;
};
Run Code Online (Sandbox Code Playgroud)
最后三个向量是我试图添加到头文件的向量.我以类似的方式将它们添加到另一个类中.在那堂课中,它没有导致错误.但在我的播放器头文件中,确实如此.你能帮我解决/澄清这个错误吗?
所有帮助将不胜感激.
编辑:试图解释为什么这个问题不重复.
它可能是重复的,但就目前而言,就我所知,问题是:" 为什么我不能将unique_ptr推送回向量?"有人试图在不使用push_back中的std :: move的情况下调用push_back函数.目前我并没有尝试将值放在我的向量中.我想要的是我标题内的一个独特指针向量.所以我是我没有尝试用元素填充向量.因此我倾向于认为不可能使用std :: move作为构建和角色向量.我知道这个错误经常发生在不调用std :: move时函数,因为我已经查看了其他StackOverflow帖子.但是他们似乎没有对我的问题有正确的答案.因为大多数答案是:使用"std :: move"或使用"默认构造函数"没解决我的问题.
我的期望是它与玩家被定义为shared_ptr有关,而玩家是向量的容器可能是问题的一部分吗?
如果类中没有定义复制构造函数,编译器将提供默认构造函数(以及赋值运算符).此默认复制构造函数将尝试复制类成员,包括此情况下的唯一指针向量.
必须使类明确不可复制:
Player(const Player&) = delete;
Player& operator =(const Player&) = delete;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6079 次 |
| 最近记录: |