2014-05-25 59 views
0

我想打印輸入我的地圖C++的指針

map<string, Ort*> Hashtable; 

的關鍵地圖的輸出是一個字符串(郵編從市) 的OBJEKT的Ort *包含名稱(字符串)和x,y座標(雙)。

我嘗試打印的地圖:

for (it = Hashtable.begin(); it != Hashtable.end(); it++) { 
     cout << it->first << " " << it->second->GetOrtsname() 
       << " (" << it->second->GetPosX() << " " << it->second->GetPosY() << ")" << endl; 
    } 

誤差輸出:

error: no match for ‘operator=’ (operand types are ‘std::map<std::basic_string<char>, Ort*>::iterator {aka std::_Rb_tree_iterator<std::pair<const std::basic_string<char>, Ort*> >}’ and ‘std::map<std::basic_string<char>, Ort*>::const_iterator {aka std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, Ort*> >}’) 
      for (it = Hashtable.begin(); it != Hashtable.end(); it++) { 

好像我瞎真正讀取錯誤輸出 感謝juanchopanza

解決方案:

map<string, Ort*>::const_iterator it; 
+2

您需要將'it'設爲'const_iterator'。 – juanchopanza

+1

非常感謝juanchpanza 你能否解釋爲什麼'它'需要是一個const_iterator? – newclear

+0

因爲你的映射是'const',或者你正在通過'const'引用來訪問它。 – juanchopanza

回答

1

錯誤

error: no match for ‘operator=’ (operand types are ‘ std::map<std::basic_string<char>, Ort*>::iterator {aka std::_Rb_tree_iterator<std::pair<const std::basic_string<char>, Ort*>>} ’ and ‘ std::map<std::basic_string<char>, Ort*>::const_iterator {aka std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, Ort*> > }’)

指的是這樣一句話:

it = Hashtable.begin() 

,它告訴你沒有對=的RHS表達的類型和的類型之間沒有有效的轉換LHS。 RHS是...const_iterator,LHS是....iterator

原因很可能是Hashtableconst的一個const圖的引用。撥打const overload of begin()時,您會收到const_iterator。這是您不允許修改const地圖內容的機制。