具有“const CompareVPtrs”类型的表达式将丢失一些 const-volatile 限定符以便调用
Posted
技术标签:
【中文标题】具有“const CompareVPtrs”类型的表达式将丢失一些 const-volatile 限定符以便调用【英文标题】:expression having type 'const CompareVPtrs' would lose some const-volatile qualifiers in order to call 【发布时间】:2013-11-06 15:32:38 【问题描述】:我正在用 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
这是我的结构
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;
完整游戏源码https://gist.github.com/sunloverz/7338003
【问题讨论】:
【参考方案1】:这意味着你的比较运算符需要是const
:
bool operator()( Vertex *lhs, Vertex *rhs) const
// ^^^^^
....
【讨论】:
这是一个更有趣的问题,为什么此错误消息仅出现在发布(生产)版本中,而不出现在调试版本中。 (刚才遇到了同样的问题。) 仅在发布版本中遇到相同的错误消息。放置 const 关键字解决了它,谢谢!有趣的是,错误消息出现在 VS2015 社区中,但没有出现在 VS2010 中(2015 年使用不同的工具集 v140_xp 与 2010 年使用 v100,这可能就是原因)。【参考方案2】:出现这个问题的原因之一是:
由于编译器一致性改进或标准更改而不再干净编译的代码。
您可以在此处阅读更多信息:
Upgrade C++ projects from earlier versions of Visual Studio Overview of potential upgrade issues (Visual C++)【讨论】:
以上是关于具有“const CompareVPtrs”类型的表达式将丢失一些 const-volatile 限定符以便调用的主要内容,如果未能解决你的问题,请参考以下文章