我正在编写一个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;
}
答案 0 :(得分:4)
令牌delete
是reserved keyword in C++。为该函数选择一个不同的名称(如remove
)。
答案 1 :(得分:4)
delete
是c ++关键字,您不能将其用作函数名Node* Node::delete(int d)
您可以将函数名称更改为Node* Node::remove(int d)
答案 2 :(得分:4)
以前的海报告诉你这个问题 - delete
是一个保留的C ++关键字,你不能将它用作你的函数名。
我想指出您的代码中的一些其他问题:
delete[] root;
,但这是错误的root
未由new[]
分配,而是new
,因此,必须取消分配{ {1}}而非delete
。 delete[]
分配的每个指针都必须使用new
取消分配,并且您使用delete
分配的每个指针都必须使用new[]
取消分配。请注意,delete[]
和new
必须成对出现。