Подтвердить что ты не робот

Error: передача 'const...' как 'этот аргумент'... отбрасывает квалификаторы

stockListType.cpp: 58: созданный здесь

/usr/include/c++/4.2.1/bits/stl_algo.h:91: error: passing ‘const stockType’ as ‘this’ argument of ‘bool stockType::operator<(const stockType&)’ discards qualifiers
/usr/include/c++/4.2.1/bits/stl_algo.h:92: error: passing ‘const stockType’ as ‘this’ argument of ‘bool stockType::operator<(const stockType&)’ discards qualifiers
/usr/include/c++/4.2.1/bits/stl_algo.h:94: error: passing ‘const stockType’ as ‘this’ argument of ‘bool stockType::operator<(const stockType&)’ discards qualifiers
/usr/include/c++/4.2.1/bits/stl_algo.h:98: error: passing ‘const stockType’ as ‘this’ argument of ‘bool stockType::operator<(const stockType&)’ discards qualifiers
/usr/include/c++/4.2.1/bits/stl_algo.h:100: error: passing ‘const stockType’ as ‘this’ argument of ‘bool stockType::operator<(const stockType&)’ discards qualifiers

Выше я получил ошибку и хотел бы, чтобы кто-то объяснил мне, что это значит. Я решил ошибку, поставив константу перед оператором перегрузки. Моя программа была выражением на фондовом рынке, которое читало файл, который содержит строку, 5 удвоений и int. Мы сортируем программу по строковым символам и индексу. Книга поручила мне использовать векторы для хранения каждой информации. Как вы видите ниже, оператор перегрузки сравнивает каждый символ и сортирует его, используя функцию сортировки контейнеров. Мой вопрос в том, почему я должен поставить константу перед оператором перегрузки для > и <. но не для > =, < =, ==,!= операторов перегрузки.

//function was declared in stockType.h and implemented in stockType.cpp
bool operator<(const stockType& stock)//symbol is a string 
{
  return (symbols < stock.symbols)
}


 //The function below was defined in stockListType.h and implemented in 
 //   stockListType.cpp where I instantiated the object of stockType as a vector.
   //vector<stockType> list; was defined in stockListType.h file

   void insert(const& stockType item)
   {
      list.push_back(item);
      }
  void stockListType::sortStockSymbols()
    {
     sort(list.begin(), list.end());
     }
4b9b3361

Ответ 1

Сообщение об ошибке сообщает вам, что вы выполняете const из своего объекта в operator<. Вы должны добавить const ко всем функциям-членам, которые не изменяют элемент.

bool operator<(const stockType& stock) const
//                                     ^^^^^
{
  return (symbols < stock.symbols)
}

Причина, по которой компилятор жалуется на operator<, состоит в том, что std::sort использует operator< для сравнения элементов.

Также у вас есть другая синтаксическая ошибка в функции insert.

Update:

void insert(const& stockType item);

в

void insert(const stockType& item);
//                         ^^