У меня есть класс URL, который перегружает операции ==, <, > и! = Для простого сравнения. Класс URL имеет член строковых данных и некоторые функции для работы с строкой. Операторы отлично работают при тестировании с помощью класса URL.Ошибка компилятора при использовании перегрузки вложенных операторов в C++
У меня также есть класс страницы, у которого есть член данных URL. Я пытаюсь перегрузить одни и те же операторы в классе Page. Равенство в классе страницы основано на равенстве их соответствующих URL-адресов, поэтому я использую логические операторы класса URL для сравнения страниц. Это создает некоторые ошибки компилятора, которые я не могу понять. Код для операторов URL:
bool URL::operator ==(URL & u) const {
//url is the string instance variable
return url == u.GetURL();
}
Код для операторов Страницы:
bool Page::operator ==(Page & p) const {
//url is the URL instance variable of the Page class
return url == p.GetURL();
}
Это приводит к ошибкам, так как:
src/Page.cpp: In member function ‘bool Page::operator==(Page&) const’:
src/Page.cpp:21: error: no match for ‘operator==’ in ‘((const Page*)this)->Page::url == Page::GetURL()()’
inc/URL.h:118: note: candidates are: bool URL::operator==(URL&) const
Я предсказываю, что это что-то тупое, что я забываю. Вы докажете мне все правильно?
Редактировать: Корректность укусила меня в заднице. Спасибо за помощь.
Когда вы пишете классы C++, экземпляр являются предназначенный для использования в качестве ценностей, которые нужно манипулировать и сравнивать, 'const'-correctness очень важна. Это не только помогает избежать ошибок компилятора, но также позволяет компилятору совершать агрессивные оптимизации, например, не загружать переменные более одного раза в регистры и т. Д. – pyon