У меня есть класс, который использует функцию друга для перегрузки оператора>>. Метод перегруженных операторов хорошо тестируется при стандартном использовании cin. Однако, когда я пытаюсь обновить код для использования объектов ifstream вместо объектов istream, прототип не распознается как допустимый метод.
Насколько я понимаю, ifstream наследуется от istream, и поэтому полиморфизм должен позволять объектам ifstream работать с перегруженной функцией istream. Что не так с моим пониманием?
Нужно ли дублировать функцию для каждого типа входного потока?
Класс:
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
class Hospital {
public:
Hospital(std::string name);
std::string getName();
void write();
friend ostream & operator<<( ostream &os, Hospital &hospital );
friend istream & operator>>( istream &is, Hospital &hospital );
private:
void readFromFile( std::string filename );
std::string m_name;
};
реализация функции:
istream &operator>>( istream &is, Hospital &hospital ){
getline( is, hospital.m_name );
return is;
}
Ошибка:
Hospital.cpp: в функции-члене 'void Hospital::readFromFile(std::string)': Hospital.cpp:42:24: ошибка: нет соответствия для 'operator>>' (типы операндов 'std::ifstream {aka std::basic_ifstream}' и 'Больница*') storeDataFile >> this;
Эта ошибка возникает в стеке после вызова readFromFile, который я копирую сюда для полноты картины:
/**
* A loader method that checks to see if a file exists for the given file name.
* If no file exists, it exits without error. If a file exists, it is loaded
* and fills the object with the contained data. WARNING: This method will overwrite
* all pre-existing and preset values, so make changes to the class only after
* invoking this method. Use the write() class method to write the data to a file.
* @param filename
*/
void Hospital::readFromFile(std::string filename) {
ifstream storedDataFile( filename.c_str() );
if( storedDataFile ){
storedDataFile >> this;
storedDataFile.close();
}
}
В этой ситуации this — это объект Hospital.
Любая помощь и идеи приветствуются. Я переучиваю себя C++ и ищу более глубокое понимание языка и его процессов.