具有类型'const CompareVPtrs'的表达式将丢失一些const-volatile限定符以便调用

Ayd*_*kov 8 c++ stl

我在C++中实现十五个益智控制台游戏,引发了以下错误

Error   4   error C3848: expression having type 'const CompareVPtrs' would lose some const-volatile qualifiers in order to call 'bool CompareVPtrs::operator ()(Vertex *,Vertex *)' c:\program files\microsoft visual studio 11.0\vc\include\xfunctional    324 1   puzzle15
Run Code Online (Sandbox Code Playgroud)

这是我的结构

struct CompareVPtrs: public binary_function<Vertex*, Vertex*, bool>
{
    bool operator()( Vertex *lhs, Vertex *rhs)
    {
        return equal((int *)lhs->state, (int *)lhs->state+16,
            (int *)rhs->state);
    }
}
CompareVP;
Run Code Online (Sandbox Code Playgroud)

完整的游戏源代码 https://gist.github.com/sunloverz/7338003

jua*_*nza 33

这意味着您的比较运算符需要const:

bool operator()( Vertex *lhs, Vertex *rhs) const
{ //                                       ^^^^^
  ....
}
Run Code Online (Sandbox Code Playgroud)

  • 更有趣的问题是,为什么此错误消息仅出现在Release(生产)版本中,而不出现在Debug版本中.(刚才有同样的问题.) (4认同)