我正在實現一個映射作爲我的硬件分配的一部分。該地圖應該支持兩種類型的迭代器:錯誤類型的迭代器使用
- 迭代器 - 允許更改地圖。
- constant_iterator - 不允許更改地圖。
我有以下幾種方法:
Map::const_iterator begin() const;
Map::const_iterator end() const;
Map::iterator begin();
Map::iterator end();
但是當我測試的實現用下面的代碼:
for(Map<std::string,int>::const_iterator it = msi.begin(); it != msi.end(); ++it) {
std::cout << *it << std::endl;
}
我得到以下問題:
map_test.cpp:49:43: error: no viable conversion from 'Map<basic_string<char>, int>::iterator' to 'Map<std::string, int>::const_iterator'
for(Map<std::string,int>::const_iterator it = msi.begin(); it != msi.end(); ++it) {
^ ~~~~~~~~~~~
./map_new.h:57:3: note: candidate constructor not viable: no known conversion from 'Map<basic_string<char>, int>::iterator' to 'const
Map<basic_string<char>, int>::const_iterator &' for 1st argument
const_iterator(const Map<KeyType, DataType>::const_iterator& sIterator):
^
這意味着編譯器選擇錯誤的開始/結束m編制方法。
我該如何解決這個問題?
但是,這隻會繞過問題,不是嗎? –
@Doppelganger不,它應該解決問題。這是標準庫容器中發生的情況。 – juanchopanza
它確實解決了這個問題,謝謝。 [我確信存在更優雅的解決方案] –