2015-10-14 32 views
1

說我有一些使用迭代器來打印多重映射

typedef std::pair<userObject*,char> Bar; 
    std::multimap<int, Bar > Foo; 
    std::multimap<int, Bar >::iterator it = foo.begin(); 

我已經插入了幾個成員進入地圖,並想使用迭代其內容的遍歷。但是,嘗試第二行代碼產生no viable conversion from....

我知道錯誤是由Bar是一對造成的。我寫了一個簡單的類,使用ints來模擬行爲,一切都按預期工作。我需要提供一些模板類T嗎?定義行爲。

這裏是a link的源代碼看代碼。

錯誤消息是

no viable conversion from '__map_iterator<__tree_iterator<__value_type<int *, [...]>, std::__1::__tree_node<std::__1::__value_type<int *, std::__1::pair<Vertex *, char> >, void *> *, [...]>>' to '__map_iterator<__tree_iterator<__value_type<int, [...]>, std::__1::__tree_node<std::__1::__value_type<int, std::__1::pair<Vertex *, char> >, void *> *, [...]>>' 
+1

'foo.begin'(無parethesis) - 它是一個錯字或真正的代碼? – SergeyA

+0

這實際上是一個錯字,謝謝! – Dev

+0

請準備[MCVE](http://stackoverflow.com/help/mcve)。你在這裏發佈的代碼示例編譯得很好,只要你將'Foo'改爲'foo',這只是一個錯字。 Github上的代碼不完整,我們無法編譯它。 –

回答

1

這不是怎麼一回事,因爲它是一對。這是因爲你沒有調用函數foo.begin,而是試圖直接訪問它。

正確的代碼爲std::multimap<int, Bar >::iterator it = foo.begin();

+0

正確的代碼是'auto it = std :: begin(foo);' –

+0

@LightnessRacesinOrbit,完全不同意。在這個例子中沒有必要使用auto。 – SergeyA

+0

可能從來沒有「自動」的「需要」。但無論如何,關注右值,這是LRIO的觀點。 –