ошибки компилятора — перегрузка операторов сравнения == переполнение стека

У меня есть базовый класс Person с 3 экземплярами.
Персона (имя строки, длинный идентификатор без знака, адрес электронной почты)
и один производный класс Student, который наследует Person
и есть один новый экземпляр в год
Студент (строковое имя, длинный беззнаковый идентификатор, международный год, строковый адрес электронной почты): Персона (имя, идентификатор, адрес электронной почты)
и один учитель класса, который не нужно описывать.

Тогда есть класс с именем eClass

и я хочу перегрузить оператор сравнения == и использовать этот оператор
в функции существует bool ()
когда я компилирую свой .cpp, у меня появляется эта ошибка

ошибка: не может определить функцию-член ‘Student :: operator ==’ внутри класса eClass
кто-нибудь может мне помочь с этим?

Также я не понимаю Const

в этой функции моего кода. что это делать?

bool Student :: оператор == (постоянный студент * &scnd)Const{… … …}

eClass{
private:
Teacher* teacher;
string eclass_name;
Student* students[MAX_CLASS_SIZE];
unsigned int student_count;

public:
eClass(Teacher* teach, string eclsnm){
teacher=teach;
eclass_name=eclsnm;
}
bool Student::operator==(const Student* &scnd)const{
return(getID==scnd.getID
&&getName==scnd.getName
&&getYear==scnd.getYear
&&getEmail==scnd.getEmail);

}
bool exists(Student* stud){
for(int i=0; i<MAX_CLASS_SIZE;++i){
if(stud==students[i]){return TRUE;}
}
return FALSE;
}
}

0

Решение

Вы пытаетесь объявить метод сравнения Student в eClass. Оператор ==, который вы показали, должен в основном принадлежать ученику, а не eClass. Const в этом случае гарантирует вам, что указатель не будет изменен каким-либо образом, что определенно нежелательно, если вы хотите просто сравнить два объекта.

2

Другие решения

Вы должны переместить оператор сравнения в Student класс, используйте только ссылку (не ссылку на указатель) и, наконец, вы пропустите скобки при вызове метода

class Student : public Person {
public:
bool operator==(const Student &scnd)const{
return getID()==scnd.getID()
&& getName()==scnd.getName()
&& getYear()==scnd.getYear()
&& getEmail()==scnd.getEmail();
}
};

Но то, что вы действительно должны сделать, это переместить часть оператора сравнения в Person класс и использовать это в своем классе ученика

class Person {
public:
bool operator==(const Person &scnd)const{
return getID()==scnd.getID()
&& getName()==scnd.getName()
&& getEmail()==scnd.getEmail();
}
};

class Student : public Person {
public:
bool operator==(const Student &scnd)const{
return Person::operator==(scnd)
&& getYear()==scnd.getYear();
}
};

В вашем exists() метод вы сравниваете указатели со студентами. Вам не нужен оператор сравнения для этого, чтобы работать.

1