должно быть
node * newNode = new node;
aNode.next = newNode
Вы должны позаботиться об удалении вручную, например, проверьте, не занято ли aNode.next
(и удалите, если оно есть).
Далее, подпись функции add
должна выглядеть следующим образом:
void add(node & aNode) { ... }
Кстати, STL поставляется с хорошим <forward_list>
; -)
Трудно сказать, что вы на самом деле спрашиваете, но, исходя из названия вопроса, возможно, вы имеете в виду структуру узла, подобную этой:
struct Node {
Node & next;
/* payload data */
Node(Node & n) : next(n) /* ... */ { }
};
Такой узел будет хранить своего преемника "по ссылке"; но вам придется инициализировать его с существующим узлом! (Нет такого понятия, как «нулевая ссылка».) * * * * * * * * * * * * * * * * * * * * * * * * * * *
Хорошо, пока вы продолжаете отказываться публиковать свой полный код, вот моя почти буквальная копия / вставка вашего кода, которая отлично работает со мной:
Обновление: Я добавляю функцию для добавления узла в конце, что может потребоваться.
#include <string>
struct node {
std::string info;
node *next;
node(std::string i = "") : info(i), next(NULL) { }
};
void add(node &aNode)
{
node *newNode;
newNode = new node;
aNode.next = newNode;
}
void add_at_end(node &aNode, std::string value = "")
{
node *newNode, *n = &aNode;
while (n->next) n = n->next; // move to the end
newNode = new node(value);
n->next = newNode;
}
int main()
{
node aNode, bNode;
add(aNode);
add_at_end(bNode, "Hello");
add_at_end(bNode, "World");
add_at_end(bNode, "!");
}
Компилировать с g++ -o prog prog.cpp -W -Wall -pedantic
.
Наконец, вот STL способ достижения того же самого:
#include <forward_list>
#include <string>
int main() {
std::forward_list<std::string> bList;
bList.push_front("Hello");
bList.push_front("World");
bList.push_front("!");
}