Operator Overloading Error: no match for 'operator>>'

Operator Overloading Error: no match for 'operator>>'

这是我的头文件。我试图重载 istream 运算符并在我的主要函数中使用 ifstream 来读取具有结构化数据(行和列)的文本文件。我收到错误消息“[错误] 'operator>>' 不匹配(操作数类型为 'std::istringstream {aka std::basic_istringstream}' 和 'std::string {aka std::basic_string}') 我评论了我收到错误的地方。 到目前为止,我的主要功能基本上是空的,除了 The class 和 object.

#include <iostream>
#include <fstream>
#include <sstream>
#include <string> 
using namespace std;

class Record
{
    private:
        string name;
        int id;
        double rate;
        double hours;
    public: 
        Record();
        Record (string n, int empid, double hourlyRate, double hoursWorked); 
// constructor

        void read_data_from_file();
        double calculate_wage();
        void print_data();

        /* SETTERS AND GETTERS */           
        void set_name (string n);
        string get_name();

        void set_id (int empid);
        int get_id();

        void set_rate (double hourlyRate);
        double get_rate();

        void set_hoursWorked(double hoursWorked);
        double get_hoursWorked();
        /* END OF SETTERS AND GETTERS */

        friend istream& operator >> (istream& is, Record& employee)
        {
            string line;
            getline (is, line);

            istringstream iss(line);

            iss >> employee.get_name(); // where i get error
        }

}; 

您必须将 get_name() 更改为 return 非常量引用,例如 string& get_name(); 才能获得它 working/compile。但是会显得很奇怪。

您可以做的是直接传递成员 name

iss >> employee.name;

这就是 friend 所做的。

并且不要忘记 return 流 is