我是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 );
};
错误:
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{
但是当我这样做时,它起作用了:
Manager::Manager(const Manager &manager ) :
Worker(manager.name,manager.id,manager.salary), workers(manager.workers){
}
有人能告诉我为什么吗?
编辑:
这是工人类代码:
这是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 );
};
这是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;
}
答案 0 :(得分:4)
编译器通过为每个字段执行赋值而生成的默认赋值运算符。因此,如果其中一个是const限定的或不可复制的编译器无法发出赋值运算符。最有可能Worker
课程(您应该在您的问题中发布)包含一个或多个此类字段。
请注意,调用this->workers=manager.workers;
将为Worker
中存储的每个worker
调用复制赋值运算符,而调用workers(manager.workers)
将调用明确定义的复制构造函数。< / p>