2010-09-16 55 views
0

我在此呼籲的問題:如何在地圖中使用const?

m_baseMap.find(baseName)->second->AddVehicale(vehicaleToAdd); 

m_baseMap下一個紅線,錯誤是:「對象的類型是不與成員函數兼容預選賽」。底圖定義如下:

map <string, const Base*> m_baseMap; 

我該如何解決它?

+3

「AddVehicale」成員函數是否爲const限定的?如果沒有,那麼你不能通過'const Base *'調用它。標題中提出的問題似乎與您在文中描述的問題無關。 – 2010-09-16 00:54:36

+0

@James +1不會因爲問題而分心。 – wilhelmtell 2010-09-16 01:24:41

回答

3

問題不在於find(),而是由於AddVehicale調用,因爲映射指定了const Base*。您或者需要使mapmap<string, Base *>或確保AddVehicale是一種常量方法(這意味着您有希望不修改映射中指向的對象),例如void Base::AddVehicale(Vehicale &v) const;

據我所知,編譯器會根據地圖本身是否爲const的時間來選擇是使用const find還是non-const find(就像你對地圖有const引用一樣)

PS Vehicale拼寫爲車輛(我使用谷歌拼寫檢查,如果我不確定,搜索該詞,它會提示正確的拼寫)

+0

我不能使AddVehicle常量,你是什麼意思「讓地圖成爲地圖」? – 2010-09-16 01:16:42

+0

它應該是map (不含const) – MattSmith 2010-09-16 01:29:42

+1

自由使用反引號可以幫助消失的模板參數列表:-)。 – 2010-09-16 01:29:58