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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2013, 19:50   #1
Alexandr555
Форумчанин
 
Регистрация: 23.03.2011
Сообщений: 310
По умолчанию удаление в классе list

Я почему то не могу удалить элемент из списка


Код:
struct coordDrTx
{
	short type, index;
	GLfloat x1, y1;
	GLfloat x2, y2;
};
std::list <coordDrTx> LDrTx;
Код:
coordDrTx p1;
...
LDrTx.remove(p1);
ошибка
Цитата:
error C2678: binary '==' : no operator found which takes a left-hand operand of type 'coordDrTx' (or there is no acceptable conversion)
ругается
Код:
	void remove(const _Ty& _Val)
		{	// erase each element matching _Val
		iterator _Val_it = end();

		for (iterator _First = begin(); _First != end(); )
			if (*_First == _Val)
				if (_STD addressof(*_First) == _STD addressof(_Val))
					_Val_it = _First++;
				else
					_First = erase(_First);
			else
				++_First;

		if (_Val_it != end())
			erase(_Val_it);
		}
как исправить это дело?
Alexandr555 вне форума Ответить с цитированием
Старый 15.10.2013, 11:04   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Alexandr555

Я почему то не могу удалить элемент из списка

ясен пень. ведь list не может впереть, как ему найти элемент для удаления.

как исправить это дело?

очевидно, добавить оператор сравнения....

Код:
bool operator==(const coordDrTx& l, const coordDrTx& r)
{
   тут проверяешь две струтуры на равенство
}
Rififi вне форума Ответить с цитированием
Старый 15.10.2013, 19:01   #3
Alexandr555
Форумчанин
 
Регистрация: 23.03.2011
Сообщений: 310
По умолчанию

типо так?
Код:
        coordDrTx p1;

	for (std::list<coordDrTx>::iterator it = LDrTx.begin(); it != LDrTx.end(); ++it)
	{
		if (*it == p1)  erase(it);
        }
а то я чето не сообразил куда мне оператор тот...

попробовал так сделать, но когда программа выполняется при LDrTx.erase выбивает с ошибкой, подскажите в чем дело

Код:
coordDrTx p1,p2;
....

	while (live)
	{
		for (std::list<coordDrTx>::iterator it = LDrTx.begin(); it != LDrTx.end(); ++it)
		{
			p2 = *it;
			if (p2.id== id) 
				LDrTx.erase(it);
		}
		live = false;
	};

Последний раз редактировалось Stilet; 16.10.2013 в 18:06.
Alexandr555 вне форума Ответить с цитированием
Старый 17.10.2013, 17:19   #4
Alexandr555
Форумчанин
 
Регистрация: 23.03.2011
Сообщений: 310
По умолчанию

народ не подскажете так как удалить?
Alexandr555 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c++][list] Порядок обработки двух list Padavan Помощь студентам 1 10.05.2011 14:56
ошибка в классе Progsenya C# (си шарп) 6 02.04.2011 18:43
Добавлени и удаление в классе. Telec Помощь студентам 2 13.05.2010 15:28
Удаление в классе! Telec Помощь студентам 1 30.04.2010 18:43
Про простые алгоритмы... или нет? Удаление из List<> Iv@n Общие вопросы .NET 1 30.04.2010 12:35