2014-10-27 57 views
0

该头文件描述的对象需要放在priority_queue中;因此我在下面的代码底部做了操作符重载。当我尝试调用处于优先级队列中的进程成员的getter函数之一时,出现此格式的错误:STL:超载和getter方法

test.cpp:xx:error:passing ... 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; 
    } 
}; 
+1

请更准确地描述错误信息。将错误消息填写完整,并将我们指向无法编译的行号。 – sfrehse 2014-10-27 15:57:30

+0

'抛弃限定符'最有可能是一个常量问题 – Drax 2014-10-27 15:58:15

+1

无论如何,为什么你没有缩进? – Deduplicator 2014-10-27 15:58:35

回答

1

你所得到的错误表明您传递一个const对象作为该参数是对非const对象的引用。可能的问题是这一行:

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

由于这种方法不以任何方式改变了传递的对象,就应该声明为const:

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

如果你试图传递一个process const这可能发生对象,或者如果您尝试传递一个临时的process,它不能绑定到非const引用。

您必须更改process的定义,以便任何不会更改对象的方法都被声明为const,否则您将无法使用这些常量引用完成很多操作。 (在这种情况下,由于getPri()没有作为一个const方法中声明,你就不能调用它。)

0

getPri() const函数:

int getPri() const {return priority;}

现在在超负荷operator()

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

编辑:你应该把所有的“吸气”功能const不改变对象的状态。

+0

对于这个问题,使_all_ getter方法'const'。如果他们不改变任何东西,请告诉编译器。 – Useless 2014-10-27 16:02:01