Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите c "typedef list<MyClass> MyClassList"  (Прочитано 7846 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Michaelss
Гость
« : 14-02-2006 17:18 » 

Всем привет! Помогите разобраться, пожалуйста!
У меня есть просиенький класс:
 
Код:
class SourceDateType{
  private:
  char MSource[120];
  char MDate[120];
  int MNum;      // Chislo par Source-Date;
  public:
  SourceDateType() { MNum = 0; }
  void SetSourceDate(char*, char*);
  char *GetSource(){ return MSource; }
  char *GetDate(){ return MDate; }
  void IncNum(){ MNum++; }
  int GetNum(){ return MNum; }
};

Я делаю STL список этих объектов:
Код:
 typedef list<SourceDateType>   SourceDateList;
 typedef list<SourceDateType>::iterator   SourceDateListIter;

И в процедуре мне надо изменять значения узлов этого списка, но VS6 ругается в следующих местах:
Код:
void CheckAndPush(SourceDateList &sdlist, SourceDateType &SD){
SourceDateListIter p;
SourceDateType sd;

for(p [b][color=red]= [/color][/b]sdlist.begin(); p[b][color=red]!=[/color][/b]sdlist.end(); ++p){
             sd = *p;
   if((strcmp(sd.GetDate(), SD.GetDate()) > 0) && (strcmp(sd.GetSource(), SD.GetSource()) > 0))
   {
  sd.IncNum();
  [b][color=red]sdlist.insert(p, *p);[/color][/b]
  return;
   }
}
sdlist.push_front(SD);

return;
}
Пишет:
Код:
Compiling...
IndexTool.cpp
C:\My Projects\IndexTool\IndexTool.cpp(142) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class std::list<class SourceDateType,class std::allocator<class SourceDateType> >::const_iterator' (or there is no
acceptable conversion)
C:\My Projects\IndexTool\IndexTool.cpp(142) : error C2679: binary '!=' : no operator defined which takes a right-hand operand of type 'class std::list<class SourceDateType,class std::allocator<class SourceDateType> >::const_iterator' (or there is no
 acceptable conversion)
Error executing cl.exe.

IndexTool.exe - 2 error(s), 0 warning(s)

[/color]

может надо перегружать операторы = и != для своего типа ну и ещё insert надо переопределить?Не понял

« Последнее редактирование: 04-12-2007 20:49 от Алексей1153++ » Записан
Pu
Большой босс

ru
Offline Offline
78


« Ответ #1 : 17-02-2006 10:43 » 

у меня твой пример в студии 7.1 откомпилился без проблем . Могу только развести руками. Улыбаюсь
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Pu
Большой босс

ru
Offline Offline
78


« Ответ #2 : 17-02-2006 10:49 » 

и в 6-й студии также без проблем ни одной ошибки
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #3 : 28-05-2007 07:37 » new

К делу не относится, но этот код медленный и потенциально опасный (если вдруг туда решат запихать наследника SourceDateType). Я бы отрефакторил на такой список (храним указатели)
typedef std::list<SourceDateType *>   SourceDateList;
При хранении объектов (как делает автор) происходит безбожное многочисленное копирование, создание и уничтожение целой тучи временных объектов (хорошо хоть список по ссылке передан)
Записан

С уважением Lapulya
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines