Работа с Clist

 

Доброго времени суток. Прошу помочь советом что делаю не так или по какой теме почитать (думаю чего-то принципиально базового не понимаю).

Почему происходит странная вещь: 


1. Передаю в метод модель.

2. Добавляю модель в список

3. Сразу же его читаю и получаю результат отличный от того что записывал.

 
postnikovmaksim:

Доброго времени суток. Прошу помочь советом что делаю не так или по какой теме почитать (думаю чего-то принципиально базового не понимаю).

Почему происходит странная вещь: ****

1. Передаю в метод модель.

2. Добавляю модель в список

3. Сразу же его читаю и получаю результат отличный от того что записывал.


Форум: как вставить картинку.

 
postnikovmaksim:

Доброго времени суток. Прошу помочь советом что делаю не так или по какой теме почитать (думаю чего-то принципиально базового не понимаю).

Почему происходит странная вещь: 


1. Передаю в метод модель.

2. Добавляю модель в список

3. Сразу же его читаю и получаю результат отличный от того что записывал.


вставьте код, как все делают, покажу ошибку

картинки не надо вставлять, мы не в журнале Мурзилка

 
Alexey Volchanskiy:

вставьте код, как все делают, покажу ошибку

картинки не надо вставлять, мы не в журнале Мурзилка


Извините, думал что так будет нагляднее:

  void AddNewModel(CModel &model)
  {
   if(sellList.Total()==0)
   {
      sellList.Add(&model);
      int total = sellList.Total();
      CModel firstNode = sellList.GetFirstNode(); 
      return;
   }
 

Метод Add() ждет указателя на объект.

А ты передаешь туда ссылку на объект (интересно, как это удалось сделать ?).

GetPointer(), думаю, должен помочь.

Но, обрати внимание на время жизни твоего объекта - возможен случай, когда объект будет удален, а список будет существовать.

 
Спасибо, теперь понятно что нужно почитать по указателям и ссылкам. Предполагал что это близкие понятия.
 

Но смена ссылки на указатель ничего не дала:

void AddNewModel(CModel &model)
  {
   if(sellList.Total()==0)
     {
      sellList.Add(GetPointer(model));
      int total=sellList.Total();
      CModel firstNode=sellList.GetFirstNode();
      return;
     }

Ситуация повторилась, элементы в списке имеют неверные значения.

 
postnikovmaksim:

Но смена ссылки на указатель ничего не дала:

Ситуация повторилась, элементы в списке имеют неверные значения.

Погоди-погоди.

Ты взял указатель, заполнил им вершину списка.

Потом создал объект firstNode, и приравнял его указателю, полученному из вершины списка.

Вопрос - у тебя конструктор копирования есть ?  Без конструктора копирования - понятное дело, что объект firstNode - не будет равен объекту model.

Подозреваю также, что ты хочешь иметь только один объект model, а не два - model и firstNode.

 
postnikovmaksim:

Но смена ссылки на указатель ничего не дала:

Ситуация повторилась, элементы в списке имеют неверные значения.


Объекты списков надо создать на глобальном уровне, не? а не создавать каждый раз новые в ф-ии. Или хотя бы удалять их потом после использования

 

Спасибо, я понял свою ошибку. У меня получилось что я указатель пытаюсь присвоить модели, естественно ничего не получилось. Но если написать:

CModel *firstNode=sellList.GetFirstNode();

то я получу указатель, и сохраню в корректную переменную. Во всяком случае вроде бы получилось - модель после прочтения корректна.

А можно пожалуйста еще раз ссылку на "время жизни" объекта, а то ссылка вроде не туда куда надо ведет.

 
Maxim Dmitrievsky:

Объекты списков надо создать на глобальном уровне, не? а не создавать каждый раз новые в ф-ии. Или хотя бы удалять их потом после использования


Меня как раз вариант создания новой модели в функции устраивает. Я анализирую историю и если нахожу подходящую модель, то ее создаю. А так как каждый раз при поиске модели я пробегаю по историческим данным, то повторы хочу отсекать анализируя ранее сохраненные модели. Лишнее модели буду удалять, например в случае повторения.

Причина обращения: