通过引用传递迭代器会给出错误:无法将参数 1 从 'const data' 转换为 'data &

Passing iterator by reference gives an error: cannot convert parameter 1 from 'const data' to 'data &

本文关键字:data 参数 const 转换 引用 迭代器 错误 出错      更新时间:2023-10-16

我有一个函数 int func(data& dt)。它s need to use the list of structures LST . It S提出地图和列表具有一些元素(但在我的示例中,它具有一个元素)。我必须遍历列表,然后通过参考将每个元素推入func函数。

#include <iostream>
#include <map>
#include <algorithm>
#include <list>
#include <string>
typedef struct{
    char inf[3];
}data;
std::map<int, data*> mp;
std::list<data> lst;
int func(data& dt){
    ...
}
int main(){
     ...
    //iterate through list
    std::list<data>::const_iterator iterator;
    for (iterator = lst.begin(); iterator != lst.end(); ++iterator) {
        data param = *iterator;
        func(param); 
        //func(*iterator); // doesn`t work!
    }
    return 0;
}

问题是: func don t work with *iterator. Why should I do this: data param = *iterator`以使其正常工作吗?谢谢您的帮助!

iterator实际上是const_iterator

std::list<data>::const_iterator iterator;

但是,您尝试通过其目标的功能期望一个非const参考:

int func(data& dt){

const_iterator不能为您提供非const参考。您需要使用非const std::list<data>::iterator,或更改功能以与const data&参数一起使用。从表面上看,看来参数不需要非const参考。