我試圖自己實現一個鏈表。目前,我只在列表的末尾添加了一個元素,並且還有一個打印列表內容的函數。但是當我想打印一份清單時,我的程序給了我一個分段錯誤。我的繼承人代碼:單鏈表列錯誤問題
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
class Stuff;
class List
{
private :
Stuff *first, *last;
public :
List();
void addfront(Stuff *s);
void print();
~List();
};
class Stuff
{
private :
string name;
double price;
public :
Stuff();
Stuff(string, double);
void print();
Stuff *next;
};
Stuff::Stuff()
{
name = "";
price = 0;
next = NULL;
}
Stuff::Stuff(string n, double p)
{
name = n;
price = p;
}
void Stuff::print()
{
cout << name << " " << price << "\n";
}
List::~List()
{
}
void List::addfront(Stuff *s)
{
if(first == NULL)
first = s;
last->next = s;
s->next = NULL;
last = s;
}
void List::print()
{
Stuff *p;
if(last == first == NULL)
cout << "list is empty!\n";
else
for (p = first; p != NULL; p = p->next)
p->print();
}
List::List()
{
first = last = NULL;
}
int main(int argc, char **argv)
{
List l;
Stuff *s1 = new Stuff("Coffe", 4.50);
Stuff *s2 = new Stuff("Apple", 2.50);
l.addfront(s1);
l.addfront(s2);
l.print();
return 0;
}
你不應該在C++中使用'NULL'宏...而是使用'0'。 –
Juste一句話,'last == first == NULL'不會像你期望的那樣工作。改爲使用'last == first && first == NULL'。 –
@ bash.d這並不好,使用'nullptr'。 – Djon