2014-10-27 66 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