簡體   English   中英

使用map迭代器編譯錯誤

[英]Compile error using map iterators

在我的頭文件中,我已經包含了std :: map並使用了相應的命名空間。
我的一位成員是:

map<unsigned int, double> pT_Spam;

在我的.cpp文件中,我嘗試做一些我經常做一段時間的事情:

for(map<unsigned int, double>::iterator it=pT_Spam.begin() ; it!=pT_Spam.end() ; it++) {/*code*/}

在cplusplus.com上使用std :: map的例子中甚至提到了上述內容。 即使我在代碼的其他部分中完成了相同的操作,導致沒有編譯錯誤,但在這個特定的行上我從Cygwin得到以下錯誤:

error: conversion from `std::_Rb_tree_const_iterator<std::pair<const unsigned int, double> >' to non-scalar type `std::_Rb_tree_iterator<std::pair<const unsigned int, double> >' requested

這似乎很奇怪。 知道什么可能是錯的嗎? (我的標題當然包含在我的.cpp中)

似乎在這個循環存在的范圍內,映射是const。 例如,類方法中的循環是否聲明為const,就像這樣?

void method() const // const method
{
    // Do stuff.
}

或作為const參數傳遞,像這樣?

void function(const map<unsigned int, double>& pT_Spam)
{
    // Do stuff.
}

如果是,則必須使用const迭代器:

for(map<unsigned int, double>::const_iterator it=pT_Spam.begin() ; it!=pT_Spam.end() ; it++)
{
    /*code*/
}

或者,如果您使用的是C ++ 11,那么您應該使用auto關鍵字:

for(auto it=pT_Spam.begin() ; it!=pT_Spam.end(); it++)
{
    /*code*/
}

因為在您展示的情況下必須使用const迭代器,所以不能使用它們來修改地圖或其中的數據。 這是const的正確性,這是一件好事:)。

好吧,錯誤說您正在嘗試將const_iterator強制轉換為迭代器。 你說pT_Spam是會員。 它是const對象的成員嗎? 如果是,則begin()和end()將返回const_iterators。

您需要將const_iterators用於地圖,因此它應該是:

for(map<unsigned int, double>::const_iterator it = \\and so on

編輯:正如上面指出的那樣是正確的,但是出於完全錯誤的原因(地圖有非const迭代器。我在想什么呢?我不知道)。 很可能你的地圖被定義為const(如另一個答案中所指出的)。

for(map :: iterator it = pT_Spam.begin(); it!= pT_Spam.end(); it ++)

把它變成了

for(map :: const_iterator it = pT_Spam.begin(); it!= pT_Spam.end(); it ++)

因為它指向常量值,所以迭代器也必須是const類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM