2011-04-10 45 views
2

我有一個包含類的頭文件。在這一類中,我有一個函數,像這樣:奇怪的const正確性錯誤

class Definition 
{ 
public: 
    int GetID() 
    { 
    return Id; 
    } 

//Other methods/variables 
private: 
    int Id; 

} 

當我attemped得到那個ID爲這樣:

for (std::map<Definition, std::vector<bool> >::iterator mapit = DefUseMap.begin(); mapit != DefUseMap.end(); ++mapit, defIndex++) 
{ 
    stream << "Definition " << (*mapit).first.GetID() << " Def Use" << endl << "\t"; 
} 

我收到以下錯誤

CFG.cc:1145:錯誤:將'const Definition'作爲'int'的參數'int Definition :: GetID()'丟棄限定符

是因爲我在地圖內部使用定義,而且我不允許調用方法那映射def從頭?有沒有辦法讓這個ID變出來?

預先感謝

回答

9

聲明getID()方法常量:

int getId() const 
{ 
    return Id; 
} 

然後,該方法可以通過const引用,這是什麼operator<<()被傳遞被調用。

+4

的一般規則是聲明的方法'const'如果只需要' const'訪問對象,即'this'可以是一個'const'指針,事情就會正常工作。還要注意'mutable'關鍵字,它表示可以在'const'方法中更改類成員。 「可變」成員的一個例子是,如果你想記錄一個對象的最後訪問時間。在這種情況下,訪問時間戳將是一個「可變」成員,因此可以從「const」getter方法更新。 – 2011-04-10 03:06:18

+0

user127817 - 如果您發現我的答案令人滿意,請考慮接受它。謝謝! – QuantumMechanic 2011-04-10 17:56:21

1

map<Key, Value>將您的數據內部存儲在std::pair<const Key, Value>中。這樣就很難意外地改變密鑰並破壞元素的排序。

爲了能夠調用的getId()爲常量鍵,功能就必須聲明爲const還有:

int GetID() const;