对由该类中的成员字符串保存对象的向量进行排序

时间:2017-02-16 17:03:50

标签: c++ vector

我正在尝试对这个课程进行排序,但出于某种原因,我无法让它发挥作用。有人可以告诉我我做错了什么。

#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] |

1 个答案:

答案 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