我在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();
}
答案 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);