此头文件描述的对象需要放在priority_queue中;因此我在下面的代码底部进行操作符重载。当我尝试在优先级队列中的进程成员上调用其中一个getter函数时,我收到此格式的错误:
test.cpp:xx:error:传递... as ...参数...丢弃限定符
正如您所看到的,我通过将某些变量声明为公共来尝试了一种廉价的解决方法,但是当我尝试从主程序更改这些变量时,它表示它无法从只读文件更改变量。我对STL很陌生。有什么方法可以解决这个问题,或解决方法?
class process
{
int priority; //for priority queues
public:
process();
~process(){};
void setPri(int newPri) {priority = newPri;}
int getPri() {return priority;}
};
class compareProcess
{
public:
bool operator() (process& param1, process& param2)
{
if (param1.getPri() > param2.getPri()) return true;
else return false;
}
};
答案 0 :(得分:1)
可能你需要写
bool operator() ( const process& param1, const process& param2) const { ... }
这意味着参数需要为http://www.cplusplus.com/reference/queue/priority_queue/
所需的const
答案 1 :(得分:1)
您获得的错误表明您将const对象作为参数传递给非const对象。可能的问题是这一行:
bool operator() (process& param1, process& param2)
由于此方法不会以任何方式更改传递的对象,因此应将它们声明为const:
bool operator() (process const & param1, process const & param2)
如果您尝试传递process const
对象,或者尝试传递process
临时值,而不能绑定到非const引用,则会发生这种情况。
你必须改变process
的定义,这样任何不改变对象的方法都会被声明为const
,否则你将无法做很多事情。这些const引用。 (在这种情况下,由于getPri()
未声明为const方法,因此您将无法调用它。)
答案 2 :(得分:0)
使getPri()
成为const函数:
int getPri() const {return priority;}
现在处于重载的operator()
:
bool operator() (const process& param1, const process& param2) const
{
return param1.getPri() > param2.getPri();
}
编辑:你应该把你所有的" getter"函数const
不会改变对象的状态。