Как переопределить операторы != и == в с++ для структуры?

При итерировании списка студентов компилятор просит переопределить оператор !=.
Вот фрагмент кода, где я это пытаюсь сделать:

static student operator == (request c1, request c2)
	{ 
		
		if (c1.Name == c2.Name)
			return;
	    if(c1.MiddleName==c2.MiddleName)
			return;
		if(c1.Surname==c2.Surname)
			return;
        if(c1.language==c2.language)
			return;
		if(c1.languagelevel==c2.languagelevel)
			return;
		
	}
	static request operator != (request c1, request c2)
	{
		 if (!(c1.Name == c2.Name))
			 return ;
		 if (!(c1.MiddleName == c2.MiddleName))
			 return;

		 if (!(c1.Surname == c2.Surname))
			 return;

		 if (!(c1.language == c2.language))
			 return;

		 if (!(c1.languagelevel == c2.languagelevel))
			 return;
	}

Далее я покажу вам как выглядят поля:

wchar_t Name[80];
	wchar_t MiddleName[80];
	wchar_t Surname[80];
	wchar_t language[80];
	wchar_t languagelevel[80];
	Intensivity intensivity;

И вот как я это итерирую:

for (list< request>::iterator it = requests->begin() ; it!=requests->back();it++ )

Как переопределить операторы чтобы итерация работала корректно?
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Операторы должны возвращать bool и принимать константные ссылки на структуры.

Но вообще-то раз вы итерируетесь по списку, вы сравниваете итраторы, а не структры. Поэтому достаточно просто использовать страндартную конструкцию:
for (auto it = requests->begin(); it != requests->end(); ++it)


И не надо ничего переопределять. Вы перепутали end и back. Первый возвращает итератор, а второй - элемент.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы