我在HC类的remv()方法中遇到了find_if()问题。这个方法的目的是从vector humans中删除一个ptr,下面是我的代码:
class H {
protected:
//string name = "null";
public:
virtual string getName() = 0;
};
class P : public H {
string name;
public:
P() {}
P(string n) : name(n) {}
string getName() {return this->name;}
};
class HC {
public:
vector< unique_ptr<H> > humans;
void add(unique_ptr<H> h) { this->humans.push_back(move(h)); }
void display() { for(auto& i: humans) cout << i->getName(); }
void remv(){
string s;
cin >> s;
auto it = find_if(humans.begin(), humans.end(), [&s](unique_ptr<H> h) {return h->getName() == s;});
humans.erase(humans.begin());
}
};
一旦find_if()被放入remv(),我会看到以下内容:
error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = H; _Dp = std::default_delete]’
你能解释一下我的代码有什么问题吗?我猜这与移动语义学有关
1条答案
按热度按时间6tdlim6h1#
unique_ptr<H> h
-它试图复制一个不可复制的对象。错误消息通知您已删除的复制构造函数。如果你不想复制和修改一个参数,你应该使用一个常量引用const unique_ptr<H>& h
。其他有用的变化。
virtual string getName() = 0;
到virtual string getName() const = 0;
。string getName()
到string getName() const override
。