无法返回节点指针

时间:2012-11-15 22:04:58

标签: c++

我正在编写一个C ++链表类。我已经实现并测试了插入和打印。但是,我似乎无法返回一个Node指针进行删除。我尝试删除时收到这些错误:

    Node.h:11: error: expected unqualified-id before "delete"
    Node.h:11: error: abstract declarator `Node*' used as declaration
    Node.h:11: error: expected `;' before "delete"

    Node.cpp:21: error: expected unqualified-id before "delete"
    Node.cpp:21: error: expected init-declarator before "delete"
    Node.cpp:21: error: expected `,' or `;' before "delete"

    make.exe: *** [Node.o] Error 1

    Execution terminated

这是我的代码:

Node.h

    #ifndef Node_H
    #define Node_H


    class Node{
          int data;
          Node* next;

    public:
           Node(int data);       
           void insert(int d);
           Node* delete(int d);
           void printOut(void);
    };

    #endif

Node.cpp

    #include <stdio.h>
    #include "Node.h"

    Node::Node(int d){
          data = d;
          next = NULL;
          }

    void Node::insert(int d){

          Node* n = this;
          Node* current = new Node(d);

          while(n->next != NULL){
                  n = n->next;                   
                  }

          n->next = current;
          }

    Node* Node::delete(int d){

          Node* head = this;
          Node* n = this;

          if (n->data = null){
             return n;
             }

          if (n->data == d){
             return n->next;
             }

          while(n->next != NULL){

          if (n->next->data == d){
             n->next = n->next->next;
             return head;
             }

          n = n->next;

          }

        return head;

        }

    void Node::printOut(void){

         Node* n = this;

         while(n->next != NULL){
                      printf("%d ->", n->data);
                       n = n->next;                   
                       }

         printf("%d \n", n->data);

         }

主:

    #include <iostream>
    #include <stdio.h>
    #include <cstdlib>

    #include "Node.h"
    using namespace std;

    int main (void){
        int i = 0;

        Node* root = new Node(111);
        Node* result;

        for (i = 0; i < 9; i++){
            root->insert(i);
            } 

        root->printOut();

        result = root->delete(5);

        result->printOut();

        printf("Hello j \n");

        getchar();
        delete[] root; 
        return 0;   
    }

3 个答案:

答案 0 :(得分:4)

令牌deletereserved keyword in C++。为该函数选择一个不同的名称(如remove)。

答案 1 :(得分:4)

delete是c ++关键字,您不能将其用作函数名Node* Node::delete(int d) 您可以将函数名称更改为Node* Node::remove(int d)

http://en.cppreference.com/w/cpp/keyword

答案 2 :(得分:4)

以前的海报告诉你这个问题 - delete是一个保留的C ++关键字,你不能将它用作你的函数名。

我想指出您的代码中的一些其他问题:

  1. 首先,您致电delete[] root;,但这是错误的root未由new[]分配,而是new,因此,必须取消分配{ {1}}而非delete
  2. 其次,您没有删除列表中的任何节点。对于这个小程序来说可能没问题(当程序退出时内存将返回到操作系统)你仍然在泄漏内存。您使用delete[]分配的每个指针都必须使用new取消分配,并且您使用delete分配的每个指针都必须使用new[]取消分配。请注意,delete[]new必须成对出现。
  3. 最后但并非最不重要:看看当您尝试在仅由单个根组成的列表上调用'printOut'时会发生什么。您将看到没有任何内容被打印出来。有关为什么会发生这种情况的提示,请查看printOut()中的代码,并自己说出代码的逻辑,就好像您是执行它的计算机一样。
  4. 祝你好运。