gpt4 book ai didi

c++ - 按该类中的成员字符串对包含对象的 vector 进行排序

转载 作者:行者123 更新时间:2023-11-28 05:17:39 26 4
gpt4 key购买 nike

我正在尝试对此类进行排序,但由于某种原因我无法使其正常工作。有人可以告诉我我做错了什么吗。

#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|错误:将“const CLog”作为“std::string CLog::GetName()”的“this”参数传递会丢弃限定符 [-fpermissive]|

25|错误:将“const CLog”作为“std::string CLog::GetName()”的“this”参数传递会丢弃限定符 [-fpermissive]|

最佳答案

这是一个非const成员函数:

string GetName()
{
return m_sName;
}

这意味着它被认为是一个“修改”对象的函数。我们从代码中可以看出实际上你没有,但是 const-correctness 不关心那个。您根本无法在 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 !

关于c++ - 按该类中的成员字符串对包含对象的 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42280343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com