operator <<必须只取一个参数

Eli*_*iel -1 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
Run Code Online (Sandbox Code Playgroud)

这是这个类的实现:

#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;  
}
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我,请问运营商<<我写的是什么?

Chr*_*ckl 6

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

std::ostream& Worker::operator<<(std::ostream& os, const Worker& w)  
Run Code Online (Sandbox Code Playgroud)

应该:

std::ostream& operator<<(std::ostream& os, const Worker& w)  
Run Code Online (Sandbox Code Playgroud)

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

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