【发布时间】:2017-12-08 11:37:20
【问题描述】:
创建了一个 boost::priority_queue 并定义了我的比较操作。这是我的 priority_queue 的样子,
boost::heap::priority_queue<myObject*, boost::heap::compare<myObjectPtrCompare> > max_heap;
我的比较定义为,
struct myObjectPtrCompare
{
bool operator()(const myObject* lhs, const myObject* rhs) const
{
return (lhs->getTime() < rhs->getTime());
}
};
我用过,
myObject* obj1 = static_cast<myObject*>(base1);
'base1' 是类 'myBase' 的对象(myObject 的基类)
其中用于比较的myObject和getTime()定义为,
class myObject : public myBase {
Time getTime() const { return time; }
.
.
.
...
}
编译这个给我这个错误,
c:\Projects\pq_test.cpp(27): error C2662: 'void boost::heap::priority_queue<myObject*,boost::heap::compare<myObjectPtrCompare>,boost::parameter::void_,boost::parameter::void_,boost::parameter::void_>::push(myObject *const &)' : cannot convert 'this' pointer from 'const boost::heap::priority_queue<myObject *,boost::heap::compare<myObjectPtrCompare>,boost::parameter::void_,boost::parameter::void_,boost::parameter::void_>' to 'boost::heap::priority_queue<myObject *,boost::heap::compare<myObjectPtrCompare>,boost::parameter::void_,boost::parameter::void_,boost::parameter::void_> &'
1> Conversion loses qualifiers
使用 Visual Studio 2013 C++。我知道我在 const 正确性方面做错了,但我无法弄清楚哪里出了问题。任何帮助表示赞赏。
TIA!
编辑1: @Maxim Egorushkin:谢谢! 我看到了,
myObject* obj1 = static_cast<myObject*>(base1);
在一个函数中,该函数是一个 const 函数,其签名是,
void workOnObj(myBase* base1) const;
所以,我将我的 priority_queue 的定义更改为 const,
const boost::heap::priority_queue<Container*, boost::heap::compare<ContainerPtrCompare> > max_heap;
并期望错误会消失,但它仍然有相同的错误。
【问题讨论】:
-
推送从何而来?按原样显示相关代码。
标签: visual-c++ boost priority-queue