【发布时间】:2019-04-08 21:34:37
【问题描述】:
我正在尝试使用 lambda 函数对自定义类的向量进行排序,但在某处我得到了一个我不理解的废弃 const。
我已经尝试在这里寻找答案,虽然很多人都问过几乎完全相同的问题,但似乎没有一个是同一个问题。我不禁止移动构造函数,也不在排序中调用非常量成员/成员函数(至少我知道。显然我做错了什么。)我能想到的最接近的是我做返回非 const 成员的值,但我通过 const 函数执行此操作,并且我明确希望这样做。我想要不能改变任何东西的面向公众的成员函数,以及可以在内部更改的面向私有的成员(但不能通过任何面向公众的函数)。我正在做的唯一真正奇怪的事情(我认为这不会对此产生任何影响)是我的类是不可复制的,并且有一个不可复制的成员(移动很好)。
class MyClass{
public:
const SortByThis() { return internal_value; } //Edit: This declaration is the problem, as noted in the accepted answer.
MyClass(SortByThis, BigNonCopyableDataStrcuture);
MyClass(MyClass&)=delete; //No copy allowed. Only move.
private:
int internal_value;
BigNonCopyableDataStructure_t big_structure;
}
std::vector<MyClass> vec;
DoFillVec(vec); //Vec now has many items but is not sorted
std::sort(vec.begin(), vec.end(), [](const MyClass &lhs, const MyClass &rhs){return lhs.SortByThis() < rhs.SortByThis();});
//This is where things scream at me.
//Project/Module.cc:226:95: error: passing ‘const Namespace::Module::MyClass’ as ‘this’ argument discards qualifiers [-fpermissive]
我希望这会对向量进行排序,但编译器却抱怨我做错了什么,而且我不明白我到底做错了什么。在这一点上,我只能在它编译之前玩弄东西(这不是一种恶心的感觉)。
【问题讨论】:
-
我想你的意思是说
int SortByThis() const { return internal_value; }。 -
但在某处我得到了一个我不理解的废弃 const。
const SortByThis(){ return internal_value; }需要是int SortByThis() const { return internal_value; } -
谢谢你们。我确实声明了一个常量返回类型而不是一个常量函数......哎呀。
-
你为什么把答案放在问题里?现在看起来你问“这是这个不起作用的代码:。为什么它不起作用?”
-
好点。我会恢复它,以便它对任何未来的谷歌人更有帮助。
标签: c++