我是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;
}
name
声明为const std::string name;
,因此在构造函数初始化后无法对其进行赋值。这与const int x(25); x = 85;
是相同的情况。 - user7860670operator=
。 - Elior Sastielworkers(manager.workers)
可以正常工作,应该优先考虑使用它。 - user7860670