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());
}
Ответы
Ответ 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);
// ^^