STL:重载和getter方法

时间:2014-10-27 15:54:49

标签: c++ stl

此头文件描述的对象需要放在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;
    } 
};

3 个答案:

答案 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不会改变对象的状态。