STL:重载和吸气方法

STL: overloading and getter method

本文关键字:方法 重载 STL      更新时间:2023-10-16

这个头文件描述的对象需要放在priority_queue中;因此我在下面的代码底部进行了运算符重载。当我尝试在优先级队列中的进程成员上调用 getter 函数之一时,出现以下格式的错误:

测试.cpp:XX:错误:通过...如。。。的论点...丢弃限定符

如您所见,我通过将某些变量声明为公共变量来尝试一种廉价的解决方法,但是当我尝试从主程序更改这些变量时,它说它无法更改只读文件中的变量。我对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;
    } 
};

可能你需要写

bool operator() ( const process& param1, const process& param2) const { ... }

这意味着需要根据 http://www.cplusplus.com/reference/queue/priority_queue/的要求const参数

您收到的错误表明您正在将 const 对象作为参数传递,该参数是对非 const 对象的引用。 可能的问题是这一行:

bool operator() (process& param1, process& param2)

由于此方法不会以任何方式更改传递的对象,因此应将它们声明为 const:

bool operator() (process const & param1, process const & param2)

如果尝试传递 process const 对象,或者尝试传递无法绑定到非 const 引用的临时process,则可能会发生这种情况。

您必须更改process的定义,以便任何不更改对象的方法也声明为const,否则您将无法对这些 const 引用执行太多操作。 (在这种情况下,由于getPri()未声明为 const 方法,因此您将无法调用它。

使getPri()成为常量函数:

int getPri() const {return priority;}

现在在重载operator()

 bool operator() (const process& param1, const process& param2) const
 {
    return param1.getPri() > param2.getPri();
 } 

编辑:你应该使所有"getter"函数const不会改变对象的状态。