2015-04-08 3 views
2

Не удалось найти ответ на мой вопрос, так что вот оно. Я создал класс с перегруженным >> оператором. Позже в коде у меня есть метод, который использует тот же код, поэтому я хотел использовать перегруженный оператор с этим указателем, но, похоже, это не так просто. Интересно, в чем проблема и как ее решить в элегантной форме.Использование перегруженного оператора ввода с помощью этого указателя

Код:

class Zadanie 
{ 
    int rozmiar; 
    vector<int> dane; 
public: 

Zadanie(int _rozmiar = 0) 
{ 
    rozmiar = _rozmiar; 
    dane.reserve(rozmiar); 
} 

int getRozmiar()    { return rozmiar; } 
void setRozmiar(int _rozmiar) { rozmiar = _rozmiar;} 

friend istream & operator >> (istream & StrmWe, Zadanie & zadanie) 
{ 
    StrmWe >> zadanie.rozmiar; 
    for(int i = 0 ; i < zadanie.rozmiar; i++) 
    { 
     int tmp; 
     StrmWe >> tmp; 
     zadanie.dane.push_back(tmp); 
    } 

    return StrmWe; 
} 

void WczytajDaneZPliku() 
{ 
    const char* filepath = "data0.txt"; 
    ifstream plik(filepath); 
    //plik.open(filepath, ios::in); 

    if(plik.good()) 
     plik >> this; 

    plik.close(); 
} 

};

Ошибка: не подходит для 'оператора >>' (типы операндов не являются 'станд :: ifstream {ака станд :: basic_ifstream}' и 'Zadanie * Const')

Я с нетерпением жду для кого-то, который откроет мне эту тайну.

ответ

1

С вашего operator >>() принимает Zadanie вы можете использовать plik >> *this;. *this разыгрывает указатель и дает вам базовый объект.

+0

Да, это ответ. Большое спасибо. – Treck

0

Вы должны обратиться к *this:

if(plik.good()) 
     plik >> *this; 

В качестве альтернативы, вызовите оператор явно:

if(plik.good()) 
     operator>>(plik, *this); 
Смежные вопросы