2011-11-07 62 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的主函数。