2013-05-12 2 views
0

У меня есть вопрос об операторах и о том, как их перегрузить. Есть пример кода, и я перегружаю operator<<, но он не работает. Существует класс, который я использую:Перегрузка оператора C++ не работает

class CStudent{ //class for students and their attributes 
    int m_id; 
    int m_age; 
    float m_studyAverage; 

    public: 

    CStudent(int initId, int initAge, float initStudyAverage): m_id(initId), m_age(initAge), m_studyAverage(initStudyAverage){} 

    int changeId(int newId){ 
     m_id = newId; 
     return m_id; 
    } 
    int increaseAge(){ 
     m_age++; 
     return m_age; 
    } 
    float changeStudyAverage(float value){ 
     m_studyAverage += value; 
     return m_studyAverage; 
    } 
    void printDetails(){ 
     cout << m_id << endl; 
     cout << m_age << endl; 
     cout << m_studyAverage << endl; 
    } 

    friend ostream operator<< (ostream stream, const CStudent student); 
}; 

перегрузки:

ostream operator<< (ostream stream, const CStudent student){ 
    stream << student.m_id << endl; 
    stream << student.m_age << endl; 
    stream << student.m_studyAverage << endl; 
    return stream; 
} 

И есть главный метод:

int main(){ 

    CStudent peter(1564212,20,1.1); 
    CStudent carl(154624,24,2.6); 

    cout << "Before the change" << endl; 
    peter.printDetails(); 
    cout << carl; 

    peter.increaseAge(); 
    peter.changeStudyAverage(0.3); 
    carl.changeId(221783); 
    carl.changeStudyAverage(-1.1); 

    cout << "After the change" << endl; 
    peter.printDetails(); 
    cout << carl; 

    return 0; 
} 

Где проблема?

+1

Что не работает? Есть ли сообщение об ошибке компилятора или ошибка времени выполнения? – pmr

+1

оператор << должен ссылаться на ostream (std :: ostream &) как на первый параметр, и он также должен принимать константу-ссылку (CStudent const &), поскольку это второй параметр. И последнее, но не менее важное: оно должно возвращать ссылку на переданный поток. Итак, подведите итог: 'friend std :: ostream & operator << (std :: ostream & stream, CStudent const & student)' –

+1

@pmr есть ошибка, я не могу ее скомпилировать –

ответ

2

Проблема заключается в том, что вам нужно узнать, какие ссылки и разница между std :: ostream и std :: ostream & есть.

std::ostream& operator<< (std::ostream& stream, const CStudent& student)

+0

Спасибо, что это было, не знаю, как я его пропустил –