运营商LT;<必须采取一个参数

时间:2017-11-12 08:35:52

标签: c++

我写的这个课有错误,我不明白这是什么问题。

这是工人阶级:

#ifndef __Worker__
#define __Worker__

#include <iostream>
#include <string> 

class Worker{
    protected:
        std::string name;
        int id;
        int salary;

    public:
        Worker(const std::string& name, int id, int salary);
        Worker(const Worker& worker );
        friend std::ostream& operator<<(std::ostream& os, const Worker& w);
        int getWorkerID(){
            return this->id;
        }
        int getsSalary(){
            return this->salary;
        }
        std::string getname(){
            return this->name;
        }

};
#endif

这是本课程的实施:

#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)
{

}


std::ostream& Worker::operator<<(std::ostream& os, const Worker& w)  
{  
    os << "worker name:" << w.getname() << " id:" << std::to_string(w.getWorkerID()) << " salary:"<<std::to_string(w.getsSalary()) ;  
    return os;  
}

有人可以告诉我什么与运营商&lt;&lt;我写的?

1 个答案:

答案 0 :(得分:5)

您的实施代码中的这一行:

std::ostream& Worker::operator<<(std::ostream& os, const Worker& w)  

应该是:

std::ostream& operator<<(std::ostream& os, const Worker& w)  

那是因为Worker::operator<<是一个成员函数,而不是非成员友元函数,因为你在头文件中正确声明了它,如果它是一个成员函数,那么错误信息就意味着它意味着什么。 / p>

修复此错误后,您会发现出现了更多错误,因为您的getter成员函数不是const。要修复的另一个错误是__Worker__宏。这样的名称是为实现保留的,并且在名称中使用带小写字母的宏是很奇怪的;使它像WORKER_H