0

我用 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();
} 
4

2 回答 2

3

你想要这个:

LinkedList * l = new LinkedList();

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

或者,为了您的目的,更有效、更简单,您可以将 LinkedList 分配为本地堆栈变量:

LinkedList l;

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

于 2013-05-15T15:20:13.467 回答
1

尝试这个:

LinkedList *l=new LinkedList();

l->add(30);

当您使用“新”时,返回值是一个指针,而不是对象本身,因此您必须将类型声明为指针。

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

LinkedList l;

l.add(30);

于 2013-05-15T15:20:33.603 回答