如何确保二进制布尔运算符正确处理其参数的常量? 我学习C++,我有问题理解我为什么会犯以下错误: mst.cpp:27:15: note: no known conversion for implicit ‘this’ parameter from ‘const State*’ to ‘State*’

如何确保二进制布尔运算符正确处理其参数的常量? 我学习C++,我有问题理解我为什么会犯以下错误: mst.cpp:27:15: note: no known conversion for implicit ‘this’ parameter from ‘const State*’ to ‘State*’,c++,class,operators,constants,this,C++,Class,Operators,Constants,This,与此相关的代码是 class State { size_t _node; double _dist; public: State( size_t aNode, double aDist ) : _node{aNode}, _dist{aDist} {} inline size_t node() const { return _node; } inline double dist() const { return _dist; } inline bool operator&

与此相关的代码是

class State {
  size_t _node;
  double _dist;
public:
  State( size_t aNode, double aDist ) : _node{aNode}, _dist{aDist} {}
  inline size_t node() const { return _node; }
  inline double dist() const { return _dist; }
  inline bool operator< ( const State& rhs ) { return _dist < rhs.dist(); }
};
类状态{
节点大小;
双区;
公众:
状态(阳极大小,双支洞):节点{阳极},距离{支洞}
内联大小\u t node()常量{return\u node;}
内联双区()常量{return\u dist;}
内联布尔运算符<(const State&rhs){return_dist
有问题的行(27)是这个类声明的最后一行。为什么代码试图执行从常量到非常量的转换?如果我们不想改变任何事情,他们不应该受到同样的对待吗?此外,考虑到常数显然很重要,什么是确保示例按预期工作而不出现错误的最佳方法?

以下是我的心理猜测: 您正在使用Microsoft Visual Studio,并在“错误窗口”中向我们显示了错误。转到View->Output查看完整的编译器输出,其中应该有数百行关于错误的详细信息


继续猜测模式,您正在将这些
状态
对象存储在
集合
中,或者您正在对它们进行
排序
。无论您在做什么,都有人试图使用
运算符。您确定这是导致问题的代码吗?给出的代码与错误不匹配。另一方面,
\u node{aNode}、\u dist{aDist}
应该是
\u node(aNode),\u dist(aDist)
。因为
\u node
\u dist
不是复杂的数组类型。初始化简单类型成员的值时使用括号,而不是括号。很好的“心理猜测”:-)哈!我刚刚读了你的答案。你为什么要删除它?因为我没有对OP代码中操作员

inline bool operator< ( const State& rhs )        { return _dist < rhs.dist(); }
                                          ^^^^^^^^
friend bool operator<( const State& lhs, const State& rhs )
{ return lhs.dist() < rhs.dist(); }