从List *到int的转换无效

时间:2011-11-07 13:00:30

标签: c++ class

我创建了一个链接列表:struct Node和List Class,我在外面用我的main方法

#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;
        }

但它会产生一个错误,指出“从List *到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);
                          }
           }

      };

3 个答案:

答案 0 :(得分:6)

Lists l = new Lists(1);

应该是:

Lists *l = new Lists(1);

new提供指针。

您获得该特定错误的原因是,如果转化链Lists * - &gt;该行有效int - &gt; Lists有效。第二个在这里是有效的,因为构造函数,但第一个不是。

答案 1 :(得分:1)

你在哪一行得到提到的错误?乍一看,Lists l = new Lists(1);已经错了:Lists* l = new Lists(1);是正确的。

但是这个错误与你提到的错误不一致。另请注意,您要定义List并尝试使用Lists

这是你要编译的代码吗?

答案 2 :(得分:1)

如果您想要动态分配的列表,请使用List *l = new List(1);std::shared_ptr<List> l = make_shared<List>( 1 );

如果您希望列表具有自动存储持续时间,则为List l(1);

在使用List的类定义中注意名称,在主函数中使用Lists。