2015-05-15 2 views
0

У меня есть функция int func(data& dt). Это s need to use the list of structures lst . It s предложил, чтобы на карте и в списке были некоторые элементы (но в моем примере он имеет один элемент). Мне нужно перебирать список и нажимать каждый элемент в функцию func по ссылке.Передача итератора по ссылке дает ошибку: невозможно преобразовать параметр 1 из 'const data' в 'data &

#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 Безразлично пары t work with *iterator. Why should I do this: данных = * iterator`, чтобы заставить его работать? Благодарим за помощь!

+0

Когда вы говорите «не работает», что вы подразумеваете под этим? Вы получаете ошибки сборки? Вы получаете ошибки времени выполнения? Получаете ли вы неправильные результаты? Вы должны указать это, включая фактические ошибки, если они есть. –

+0

А, простите. Не работает = ошибка C2664: 'func': невозможно преобразовать параметр 1 из 'const data' в 'data &' – user3856196

ответ

3

iterator фактически const_iterator:

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

но функция вы пытаетесь передать свою цель ожидает неконстантную ссылка:

int func(data& dt){ 

const_iterator не может дать вам неконстантную Справка. Вам нужно либо использовать non const std::list<data>::iterator, либо изменить функцию для работы с параметром const data&. На поверхности, похоже, нет требования, чтобы параметр был не const-ссылкой.

+0

Спасибо! Это моя неосторожная ошибка. Все ясно, со значением const, да. Итак, зачем это работает: data param = * iterator? Здесь нет const, но он работает. – user3856196

+0

@ user3856196 Это тоже работает, потому что вы делаете копию цели итератора (вам нужно подумать, хотите ли вы этого.) Затем функция использует неконстантную ссылку на эту копию. – juanchopanza

+0

Большое спасибо! Теперь я понимаю! :) – user3856196

Смежные вопросы