Это работает, пока я не попытаюсь напечатать значение в третьем узле (тот, который имеет значение 3)
Это дает мне неверную ошибку доступа (code = 1 address = 0x0) в строке определения функции getNext ().
В чем проблема? Почему это работает для первых двух, а затем нет?
#include <iostream>
using namespace std;
class ListNode {
float val;
ListNode *next;
public:
ListNode(){val = 0;}
ListNode(float f){val =f;next = NULL;}
void setNext(ListNode *node){next = node;}
void setVal(float f){val = f;}
float getVal(){return val;}
ListNode getNext(){return *next;}
};
int main()
{
ListNode n = *new ListNode(5);
n.setNext(new ListNode(9));
n.getNext().setNext(new ListNode(3));
cout << n.getVal() <<endl;
n = n.getNext();
cout << n.getVal() <<endl;
n = n.getNext();
cout << n.getVal() <<endl;
return 0;
}
Одна из ваших проблем здесь:
ListNode getNext(){return *next;}
Возвращает КОПИЮ вашего узла по значению. Когда вы звоните setNext()
для этого значения вы просто изменяете временный экземпляр, который уничтожается в конце выражения. Так что это не имеет длительного эффекта.
Альтернатива будет такой:
ListNode& getNext(){return *next;}
Это вернет ссылка в узел. Я верю, что это решит проблему, о которой вы спрашиваете. У вас есть другие, такие как утечка памяти.
Других решений пока нет …