1

我正在编写一个 C++ 链表类。我已经实现并测试了插入和打印。但是,我似乎无法返回用于删除的节点指针。尝试删除时出现以下错误:

    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

这是我的代码:

节点.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

节点.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;   
    }
4

3 回答 3

4

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

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

于 2012-11-15T22:08:17.920 回答
4

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

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

  1. 首先,你打电话delete[] root;但那是错误的......root不是由new[]but with分配的new,所以必须用deleteand not解除分配delete[]
  2. 其次,您不会删除列表中的任何节点。这对于这个小程序来说可能没问题(当你的程序退出时,内存将返回给 O/S)你仍然在泄漏内存。你分配的每个指针都new必须被释放,delete你分配的每个指针都new[]必须被释放delete[]。请记住,new并且delete必须成对出现。
  3. 最后但同样重要的是:看看当您尝试在仅由单个根组成的列表上调用“printOut”时会发生什么。你会看到没有任何东西被打印出来。有关为什么会发生这种情况的提示,请查看 printOut() 中的代码,然后对自己说出代码的逻辑,就好像您是一台执行它的计算机一样。

祝你好运。

于 2012-11-15T22:17:22.643 回答
4

标记deleteC++ 中的保留关键字。为函数选择一个不同的名称(如remove)。

于 2012-11-15T22:06:30.987 回答