Ошибка перегрузки оператора: нет совпадения с оператором & gt; & gt;

Это мой заголовочный файл. Я пытаюсь перегрузить оператор istream и использовать ifstream в моей основной функции для чтения в текстовом файле со структурированными данными (строки и столбцы). Я получаю сообщение об ошибке «[Ошибка] нет соответствия для« оператора >> »(типы операндов:« std :: istringstream {aka std :: basic_istringstream} »и« std :: string {aka std :: basic_string} ‘)
Я прокомментировал, где я получаю ошибку.
Моя основная функция пока пуста, кроме класса и объекта.

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

};

-2

Решение

Вы должны изменить get_name() вернуть неконстантную ссылку, например string& get_name(); заставить его работать / скомпилировать. Но будет выглядеть странно.

Вместо этого вы можете передать члену name непосредственно

iss >> employee.name;

это то что friendс

И не забудьте вернуть поток is,

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]