C ++中链接列表出错

时间:2013-05-15 15:14:44

标签: c++ linked-list

我在C ++中实现了一个链表。我正确地实现了它,但是当我对我的代码做了一些小改动时,它给了我一个错误。
我改变了     LinkedList l;

    LinkedList l=new LinkedList();

它给了我以下错误:

"conversion from ‘LinkedList*’ to non-scalar type ‘LinkedList’ requested"

有谁能告诉我为什么?

这是我的代码:

#include<iostream>
using namespace std;

class Node
{
public:
        int data;
        Node *next;

Node(int d)
{
    data=d;
    next=NULL;
}
};

class LinkedList
{
public:
Node *head;
LinkedList()
{
    head=NULL;
}
void add(int data)
{
    Node *temp,*t=head;
    if(head==NULL)
    {
        temp=new Node(data);
        temp->next=NULL;
        head=temp;
    }
    else
    {
        temp=new Node(data);
        while(t->next!=NULL)
            t=t->next;
        t->next=temp;
        temp->next=NULL;
    }
}

void Display()
{
    Node *temp=head;
    cout<<temp->data<<"\t";
    temp=temp->next;
    while(temp!=NULL)
    {
        cout<<temp->data<<"\t";
        temp=temp->next;
    }
}
};

int main()
{
LinkedList l=new LinkedList();
l.add(30);
l.add(4);
l.add(43);
l.add(22);
l.Display();
} 

2 个答案:

答案 0 :(得分:3)

你想要这个:

LinkedList * l = new LinkedList();

请注意,new运算符将指针(Foo *)返回给堆上分配的对象。

或者,更高效,更简单,您可以将LinkedList分配为本地堆栈变量:

LinkedList l;

然后,您不必担心释放指针(使用delete),并且可以保留以下点运算符。

答案 1 :(得分:1)

试试这个:

LinkedList *l=new LinkedList();

l->add(30);

当你使用'new'时,返回值是一个指针,而不是对象本身,所以你必须将类型声明为指针。

不要忘记在底部delete l。 你也可以这样说:

LinkedList l;

l.add(30);