2011-12-07 156 views
4

我嘗試使用下面的代碼塊通過map對象迭代器:的const_iterator到迭代器C++錯誤

for(map<int, vector>::iterator table_iter = table.being(); table_iter != table.end(); table_iter++) 
{ 
    ... 
} 

而且我不斷收到錯誤,告訴我:從常量性到

轉換非標量類型迭代器請求

而我似乎無法確定爲什麼迭代器將是const與not-const,或者如何處理這個。

+0

哪條線給你錯誤? – Jon

+0

我發佈的這一行; 'for'循環線。 –

+0

你的地圖是不變的? –

回答

7

使用map<int, vector>::const_iterator而不是由map::begin返回。

+1

我注意到,有時候,使用迭代器沒有問題,然後在其他需要使用const_iterator的地方工作。它似乎與範圍確實有關,因爲我在運行一個.begin()函數時調用了一個已被lambda [=]捕獲的向量時出現此錯誤。 任何想法爲什麼這種行爲存在?有沒有關於此主題的更多信息?謝謝! – Liang

+0

如果容器是'const',或者它被調用的成員函數是'const'('void class :: memberfunction()const'),那麼它可以是這樣的。 – Gauthier

2

聽起來像tableconst對象或引用,在這種情況下,begin返回const_iterator。改變你的for循環爲:

// typedefs make for an easier live, note const_iterator 
typedef map<int, vector>::const_iterator iter_type; 
for(iter_type table_iter = table.being(); table_iter != table.end(); table_iter++) 
{ 
    ... 
} 
+0

或者迭代器被定義在'const'成員函數。 – Gauthier

0

我猜桌子是一個常量&。

1

那麼,你的問題部分回答。

「我似乎無法確定爲什麼迭代器是常量而不是常量,或者如何處理這個問題。」 正如其他人回答,如果你的表被定義爲常量,你需要定義一個常量迭代器。 缺少的是如果函數被定義爲const,迭代器也應該是const。

我想到一個const函數是你的問題,而不是一個const表。