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
Run Code Online (Sandbox Code Playgroud)
以上是我得到的错误,希望有人向我解释这意味着什么.我通过在重载运算符前面放置一个常量来解决错误.我的程序是一个股票市场应用程序,它读取包含字符串,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());
}
Run Code Online (Sandbox Code Playgroud)
bil*_*llz 21
该错误消息告诉您,您正在const从operator<函数中的对象进行转换.您应该添加const到不修改成员的所有成员函数.
bool operator<(const stockType& stock) const
// ^^^^^
{
return (symbols < stock.symbols)
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨的原因operator<是因为std::sort用于operator<比较元素.
此外,您还有另一个语法错误insert.
更新:
void insert(const& stockType item);
Run Code Online (Sandbox Code Playgroud)
至:
void insert(const stockType& item);
// ^^
Run Code Online (Sandbox Code Playgroud)