【发布时间】:2020-03-25 22:07:47
【问题描述】:
目前,我有两个班级,Ai 和 Action。
我的班级Ai 有一个成员Action,名为_root。
class Ai
{
public:
Ai();
~Ai();
private:
Action _root;
};
当我想用我的构造函数 Ai 初始化我的类 Action 时,就会出现问题。
Ai::Ai() : _root(Action(0, AI, 0, 0))
{
}
我的班级Action 和我的构造函数:
class Action
{
public:
Action(int, Availability, int, int);
~Action();
private:
int _y;
int _x;
int _depth;
Availability _type;
vector<unique_ptr<Action>> _child;
};
Action::Action(int depth, Availability type, int y, int x)
{
this->_y = y;
this->_x = x;
this->_depth = depth;
this->_type = type;
}
问题恰好发生在vector<unique_ptr<Action>> _child;。
当我创建一个对象Ai时,我的构造函数创建了一个具有默认值的对象Action,但它无法初始化unique_ptr的向量。
我的调试器给了我这个错误:
error: call to implicitly-deleted copy constructor of
'std::__1::unique_ptr<Action, std::__1::default_delete<Action> >'
::new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);
有什么想法吗?
【问题讨论】:
-
您复制构造了
_root成员,但由于向量,类Action无法复制。它必须是moved。请阅读更多关于移动语义和move constructors。
标签: c++ class pointers vector initialization