У меня есть вопрос об операторах и о том, как их перегрузить. Есть пример кода, и я перегружаю 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;
}
Где проблема?
Что не работает? Есть ли сообщение об ошибке компилятора или ошибка времени выполнения? – pmr
оператор << должен ссылаться на ostream (std :: ostream &) как на первый параметр, и он также должен принимать константу-ссылку (CStudent const &), поскольку это второй параметр. И последнее, но не менее важное: оно должно возвращать ссылку на переданный поток. Итак, подведите итог: 'friend std :: ostream & operator << (std :: ostream & stream, CStudent const & student)' –
@pmr есть ошибка, я не могу ее скомпилировать –