Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2012, 03:56   #1
litviak
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 19
По умолчанию Разыменовывание итератора

Какая то дилемма с разыменовыванием. Вот в куске кода сама струтура и ф-ция с ошибкой:
Код:
struct string_node{
		char a;
		list<string_node*> dauth_node;
		string_node *prev_node;
	};
string_node * findch(char ab,string_node *place){
		for(list<string_node*>::iterator i=place->dauth_node.begin();i!=place->dauth_node.end();++i)
			if(ab==i->a)return *i;
		return NULL;
	};
VS10 ошибка: Выражение должно иметь тип указателя на класс
litviak вне форума Ответить с цитированием
Старый 08.06.2012, 07:38   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну правильно. У тебя же не класс а структура.
Код:
if(ab==*i.a)return *i;
Если не ошибаюсь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.06.2012, 10:34   #3
litviak
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 19
По умолчанию

*i не работает, (*i) тоже не работает, * и -> неработает, но если создать указатель и задать ему значение *i, то вроде все ок... Но по итератору доступ никак не хочет давать...Может дважды разыменовать? Типа по итератору указатель по которому доступ?
litviak вне форума Ответить с цитированием
Старый 08.06.2012, 11:04   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

litviak

if(ab==*i.a)return *i;

А теперь - правильный ответ (Ж

(*i)->a

А совсем правильно - выкинуть этот ужос и использовать list по его прямому назначению:

std::list<char>
Rififi вне форума Ответить с цитированием
Старый 08.06.2012, 11:07   #5
litviak
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 19
По умолчанию

Работает) а вчера не хотел так((
спасибо)
А какие идеи для дерева кроме списка дочерних узлов?Мне кажется так наиболее удобно...

Последний раз редактировалось litviak; 08.06.2012 в 11:09.
litviak вне форума Ответить с цитированием
Старый 08.06.2012, 14:29   #6
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
У тебя же не класс а структура.
В С++ класс и структура - практически одно и то же.

i - итератор по списку указателей на структуру. Разыменовав итератор, получаешь элемент списка - указатель на структуру. Поэтому так, как написал Rififi.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
использование итератора Defunate C# (си шарп) 1 10.07.2011 15:55
Организация доступа к вектору посредством итератора jennya Visual C++ 2 03.10.2010 15:14