Объясните мне указатели. Ничего не понимаю. Пишу Лист - страница 2

 
vbymrf #:

Почему же тогда я не могу присвоить переменной типа объект ? Получаю туже ошибку. 

маленький кусочек кода с ошибкой покажите

 
Andrey Barinov #:

маленький кусочек кода с ошибкой покажите

class ObjectM
  {
protected:
   ObjectM*           prevNode;
   ObjectM*           nextNode;    

public:
   ObjectM*          Prev()                                          {return (prevNode);}   
   ObjectM*          Next()                                          {return (nextNode);}
  
 int ListM::Add(ObjectM * new_node)
  {
*****
m_last_node.Next()=new_node;
      //m_last_node.nextNode=new_node;
      new_node.Prev()=m_last_node;
      //new_node.prevNode=m_last_node;

Если рас комментировать, а верхние закомментиовать, то ошибки нет.

 
vbymrf #:

Если рас комментировать, а верхние закомментиовать, то ошибки нет.

На это я уже отвечал. Попробуйте вдуматься вот в это:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Объясните мне указатели. Ничего не понимаю. Пишу Лист

Andrey Barinov, 2023.01.28 18:23

Ну тут логика как с простыми переменными. Указатель это просто число.

В Вашем коде, то что сейчас написано, это примерно как ниже

int PrevNode;
int NewNode;
int GetPrevNode(){return(PrevNode);}
GetPrevNode()=NewNode;

Как это должно работать? Ведь результат работы функции это не переменная которой можно что-то потом присвоить. Это и есть значение.

а при комментировании, раскомментировании ваших строк, все получается правильно. PrevNode = NewNode.


 
Andrey Barinov #:

На это я уже отвечал. Попробуйте вдуматься вот в это:

Т.е. я могу присвоить так его, по вашему?:

ObjectM newNode=new_node.Prev();

Та же ошибка

Если результат функции нельзя присвоить от слова совсем. Тогда зачем функция что то выдает?
 
vbymrf #:

Т.е. я могу присвоить так его, по вашему?:

Та же ошибка

Правильно, ошибка.
Теперь подумайте: почему тут ошибка?

PS. Типы же не совпадают. Ага.
 
Sergey Gridnev #:
Правильно, ошибка.
Теперь подумайте: почему тут ошибка?

Вы издеваетесь?

 
vbymrf #:

Вы издеваетесь?

Нет
 
vbymrf #:

Т.е. я могу присвоить так его, по вашему?:

Та же ошибка

Если результат функции нельзя присвоить от слова совсем. Тогда зачем функция что то выдает?

Сможете, если одну звездочку добавите в код

 
Andrey Barinov #:

Сможете, если одну звездочку добавите в код

Спасибо, дошло как до жирафа. 

 

Любой ссылочный тип данных всегда состоит из значения и ссылки на него. Не смотря на то. Что в итоге мы все равно получим ссылочные данные. Компилятор извлекает или значение или ссылку. И далее формирует запрос программиста. В моем случае, компилятор получал значение. Которому он присваивает ссылку на него. Т.е все указатели указывают на один и тот же объект.

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