什么"默认定义将是不正确的"是指什么?

Eli*_*iel 5 c++

我是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)

use*_*670 8

编译器通过对每个字段执行赋值生成的默认赋值运算符。因此,如果其中之一是 const 限定的或不可复制的,编译器将无法发出赋值运算符。最有可能的Worker类(您应该在问题中发布)包含一个或多个此类字段。

请注意,调用this->workers=manager.workers;将为 中Worker存储的每个调用复制赋值运算符worker,而调用workers(manager.workers)将调用定义明确的复制构造函数。