我是c ++的一个初学者,我试图创建一个对象,但我得到一个错误,我不明白什么是错的.我得到错误时这是我的hpp文件+ cpp文件:
Manager::Manager(const Manager &manager ) :
Worker(manager.name,manager.id,manager.salary){
this->workers=manager.workers;
}
class Manager:public Worker {
private:
std::vector<Worker> workers;
public:
Manager(const char* name, int id, int salary);
Manager(const Manager &manager );
};
Run Code Online (Sandbox Code Playgroud)
错误:
In file included from Manager.hpp:5:0,
from Manager.cpp:1:
Worker.hpp:7:7: note: ‘Worker& Worker::operator=(const Worker&)’ is implicitly deleted because the default definition would be ill-formed:
class Worker{
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做它工作:
Manager::Manager(const Manager &manager ) :
Worker(manager.name,manager.id,manager.salary), workers(manager.workers){
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么?
编辑:
这是worker类代码:
这是worker.hpp
class Worker{
protected:
const std::string name;
const int id;
int salary;
public:
Worker(const std::string& name, int id, int salary);
Worker(const Worker& worker );
};
Run Code Online (Sandbox Code Playgroud)
这是worker.cpp:
#include "Worker.hpp"
Worker::Worker(const std::string &names, int ids, int salarys) :
name(names), id(ids), salary(salarys)
{
}
Worker::Worker(const Worker &worker):
name(worker.name), id(worker.id), salary(worker.salary)
{
}
Worker::~Worker() {
}
std::string Worker::toString(){
std::string s="Worker id:" + id ;
return s;
}
Run Code Online (Sandbox Code Playgroud)
编译器通过对每个字段执行赋值生成的默认赋值运算符。因此,如果其中之一是 const 限定的或不可复制的,编译器将无法发出赋值运算符。最有可能的Worker类(您应该在问题中发布)包含一个或多个此类字段。
请注意,调用this->workers=manager.workers;将为 中Worker存储的每个调用复制赋值运算符worker,而调用workers(manager.workers)将调用定义明确的复制构造函数。