什么“默认定义不合理”意味着什么?

时间:2017-11-03 07:41:13

标签: 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 );      
};

错误:

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;
}

1 个答案:

答案 0 :(得分:4)

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

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