2013-05-15 71 views
0

我在C++中實現了一個鏈表。我正確地實現了它,但是當我對代碼做了一些小修改時,它給了我一個錯誤。
我改變
LinkedList l;

LinkedList l=new LinkedList();
C++中鏈接列表錯誤

它給了我下面的錯誤:

"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(); 
} 

回答

3

希望此相反:

LinkedList * l = new LinkedList(); 

注意,新的運營商返回一個指針(美孚*),以在堆上分配的對象。

或者,更高效,併爲你的目的更簡單,你可以只分配的LinkedList爲本地堆棧變量:

LinkedList l; 

然後,你就不必擔心釋放的指針(使用delete ),並且可以保留以下點運算符的使用。

1

試試這個:

LinkedList *l=new LinkedList();

l->add(30);

當你使用「新」的返回值是一個指針,而不是對象本身,所以你必須聲明類型的指針。

不要忘記在底部delete l。 你也可以只說:

LinkedList l;

l.add(30);