我正在尝试对这个课程进行排序,但出于某种原因,我无法让它发挥作用。有人可以告诉我我做错了什么。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class CLog
{
public:
string GetName()
{
return m_sName;
}
void SetName(string sName)
{
m_sName = sName;
}
private:
string m_sName = "";
};
bool sortByName(const CLog &lhs, const CLog &rhs)
{
return lhs.GetName() < rhs.GetName();
}
int main()
{
vector<CLog> lsLog;
CLog oLog1;
oLog1.SetName("b");
lsLog.push_back(oLog1);
CLog oLog2;
oLog2.SetName("c");
lsLog.push_back(oLog2);
CLog oLog3;
oLog3.SetName("a");
lsLog.push_back(oLog3);
sort(lsLog.begin(),
lsLog.end(),
sortByName
);
return 0;
}
这给了我这些错误
25 | error:将'const CLog'作为'std :: string CLog :: GetName()的'this'参数传递'丢弃限定符[-fpermissive] |
25 | error:将'const CLog'作为'std :: string CLog :: GetName()的'this'参数传递'丢弃限定符[-fpermissive] |
答案 0 :(得分:1)
这是非const
成员函数:
string GetName()
{
return m_sName;
}
这意味着它被认为是一种能够修改&#34;物体。我们可以从代码中看到实际上你没有,但const
- 正确性并不关心这一点。您无法在const CLog
上,或通过const CLog&
或const CLog*
调用此类函数。
这也是一个非const
成员函数,但它返回const string
:
const string GetName()
{
return m_sName;
}
要使成员函数本身const
,您将关键字放在最后,如下所示:
string GetName() const
{
return m_sName;
}
现在你可以在const
对象上调用该函数,如果你尝试在修改对象的函数内编写代码,编译器就不会让你。
应在C ++手册中解释。如果不是,请获取a better one!