Это мой заголовочный файл. Я пытаюсь перегрузить оператор 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
}
};
Вы должны изменить get_name()
вернуть неконстантную ссылку, например string& get_name();
заставить его работать / скомпилировать. Но будет выглядеть странно.
Вместо этого вы можете передать члену name
непосредственно
iss >> employee.name;
это то что friend
с
И не забудьте вернуть поток is
,
Других решений пока нет …