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
。
这是我的头文件。我试图重载 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
。