2011-11-07 85 views
0

我創建了一個鏈接列表:結構節點列表類,我和我的主要方法使用它以外,從列表*無效轉換成int

#include "Lists.cpp" 
#include <cstdlib> 
using namespace std; 

int main(){ 


    Lists l = new Lists(1); 

    l.add(2); 
    l.add(3); 
    l.add(4); 
    l.add(5); 



    system("pause"); 
    return 0; 
     } 

,但它產生的,上面寫着「從列表中無效,轉換時發生錯誤*到int「。我使用的是外部課堂嗎?我有點困惑,我將如何解決這個問題。

#include <cstdlib> 
#include <iostream> 

using namespace std; 

struct Node{ 
     int data; 
     Node *next;  
     Node(int i){ 
       data = i; 
       next = NULL; 
       } 

     }; 

class List{ 
     Node *head; 



     public: 
     List(int i){ 
       head = new Node(i); 
     } 

     void addToHead(int i){ 
      Node *temp = new Node(i); 
      temp->next = head; 
      head = temp; 
      } 

     void add(int i){ 
       Node *currNode = head; 
       while(currNode!= NULL){ 
         if(currNode->next == NULL){ 
          currNode->next = new Node(i); 
          break;   
           } 
         else{ 
          currNode = currNode-> next;  
           } 
           } 

       } 
     void deleteNode(int i){ 
      Node *currNode = head; 
      Node *prevNode = NULL; 

      while(currNode!= NULL){ 
          if(currNode->data == i) { 
          if(prevNode== NULL){ 
              head = head->next; 
              }     
           else{ 
            prevNode->next = currNode->next; 
            }         
           } 
           prevNode = currNode; 
           currNode = currNode -> next;        
          } 
      } 
     void insert(int position, Node *n){ 
      Node *currNode= head; 
      Node *prevNode = NULL; 

      for(int counter = 0; counter>= position && currNode!= NULL; counter++){ 
        if(counter==position){ 
           Node *temp = currNode; 
           n->next = currNode; 
           prevNode->next= n;        
           }     
        prevNode = currNode; 
        currNode = currNode-> next; 
        } 
      } 
     void traverse(Node *node){ 
      if(node!=NULL){ 
      cout<< node-> data <<endl; 
      traverse(node->next); 
          } 
      } 

     }; 
+0

通常包含* .cpp文件是一個壞主意。 –

+2

或換句話說,如果你打算包含一個文件,通常把它稱爲'.cpp'是一個壞主意。 –

+0

然後生病只是包括它包括「列表」? – jko

回答

5
Lists l = new Lists(1); 

應該是:

Lists *l = new Lists(1); 

new提供一個指針。

您得到該特定錯誤的原因是,如果轉換鏈Lists *intLists有效,則該行將有效。第二個在這裏是有效的,因爲構造函數,但第一個不是。

+0

謝謝,它解決了這個問題。但爲什麼我必須將它聲明爲指針? – jko

+2

@jko,因爲'new'提供了一個指針。 –

+0

@jko:這就是動態分配的工作原理。您不會在當前範圍中獲得對象:它在動態內存中的其他位置處浮動。你能做的最好的是有一個指向它的指針。 –

1

你在哪一行得到提到的錯誤?乍一看,Lists l = new Lists(1);已經是錯誤的:Lists* l = new Lists(1);將是正確的。

但是這個錯誤並不對應你提到的那個。另請注意,您正在定義List並嘗試使用Lists

這是你正在編譯的代碼嗎?

1

如果您想要動態分配列表,請使用List *l = new List(1);std::shared_ptr<List> l = make_shared<List>(1);

List l(1);如果你想要一個具有自動存儲持續時間的列表。

請注意名稱,使用List的類定義以及使用List的主函數。