【问题标题】:operator<< must take exactly one argument [closed]运算符<< 必须只采用一个参数 [关闭]
【发布时间】:2018-04-25 02:35:36
【问题描述】:

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

这是工人阶级:

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

有人可以告诉我操作符

【问题讨论】:

  • 朋友不是会员,所以去掉Worker::前缀。
  • s/Worker::operator&lt;&lt;/operator&lt;&lt;
  • 与您的问题和问题无关,但以两个下划线开头的符号(如__Worker__)在所有范围内都保留。请阅读What are the rules about using an underscore in a C++ identifier?了解更多详情。
  • @EliorSastiel:是的,它仍然不起作用,但错误信息会完全不同!当您说它“仍然不起作用”时,请不要忘记提及如此重要的事实。我的回答也解释了如何修复这些其他错误。

标签: c++


【解决方案1】:

实现代码中的这一行:

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

应该是:

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

那是因为Worker::operator&lt;&lt; 将是一个成员函数,而不是一个非成员友元函数,因为您在头文件中正确声明了它,如果它是一个成员函数,那么错误消息的含义正是它的含义。

修复此错误后,您会发现出现更多错误,因为您的 getter 成员函数不是 const。另一个要修复的错误是__Worker__ 宏。像这样的名字是为实现而保留的,名字中带有小写字母的宏很奇怪;使其类似于WORKER_H

【讨论】:

    猜你喜欢
    • 2020-10-15
    • 2015-06-04
    • 2019-11-12
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多