2015-10-14 2 views
0

У меня есть набор элементов типа Team. Я хочу написать функцию, чтобы вернуть адрес данного элемента. Функция get_team принимает идентификатор и сравнивает его с помощью функции класса Team is_team, которая возвращает логическое значение «true», если этот объект Team имеет одинаковый идентификатор.Возврат адреса заданного объекта через итератор

1 string TeamA = "ABC"; 
2 Team A = get_team(TeamA); 
3 
4 const Team & get_team(string id) { 
5  for (set<Team>::iterator iter = teams_.begin(); iter != teams.end(); ++iter){ 
6   Team team = *iter; 
7   if (team.is_team(id)){ 
8    return *iter; 
9   } 
10  } 
11 } 

Когда это работает, адрес * ITER (строка 6, строка 8) правильно и совпадает с адресом объекта команды, сохраненной в наборе «teams_». Однако при возврате функции адрес отличается (строка 2).

Адрес элемента и * ИТЭР правильно отображает это: 0x0048e930 Адрес команды А: 0x0039f47c

Как я получить правильный адрес? (Как я могу сделать адрес Team A 0x0048e930?)

+0

Похоже, что вы хотите использовать карту вместо набора. –

ответ

0

Если вы хотите быть конкретным по адресам, вы бы хотели использовать указатели целиком. Еще одна ошибка, которую вы делаете, составляет Team A = vs Team& A =, из-за чего копируется возвращаемая ссылка, и именно поэтому адрес меняется. Это был бы адрес стека поверх него.

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