我无法使其正常工作,我正在尝试为字符串队列创建头文件,该文件具有pop函数,该函数返回并摆脱队列中的第一个值,而push则将值插入到最后,用isEmpty检查队列是否为空。
#ifndef Queue_h
#define Queue_h
#include <string>
struct Node {
string data;
Node* next;
Node() {
data = "";
next = NULL;
}
};
struct Queue {
Node* first;
Node* last;
Queue() {
first = NULL;
last = NULL;
}
~Queue() {
Node* temp = first;
while (temp != NULL) {
temp = temp->next;
delete first;
first = temp;
}
}
void push(string input) {
if (isEmpty()) {
Node* node = new Node();
first = node;
last = node;
last->data = input;
}
else {
Node* node2 = new Node();
last->next = node2;
last = last->next;
last->data = input;
}
}
string pop() {
if (!isEmpty()) {
string temp = first->data;
Node* tpointer = first;
first = first->next;
delete tpointer;
return temp;
}
return "";
}
bool isEmpty() {
if (first == NULL) {
return true;
}
else {
return false;
}
}
};
#endif
我遇到很多错误,例如“数据不是Node的成员”,“数据是未声明的标识符”,“数据是未知的覆盖说明符”之类的东西。我会复制/粘贴错误列表,但是我不知道如何轻松地做到这一点。
编辑:现在,在修正了字符串声明之后,我的错误降至4:pop不是队列第17行的成员,pop未知重写说明符第50行,语法错误(第50行,{第50行
答案 0 :(得分:2)
#include <string>
。string data;
代替std::string data;
。std::string
代替string
。我最初在上面的前两个项目中发表了评论,但我注意到pop()
函数中的错误。我以为我也将它们添加到此答案中。
从last
弹出最后一项时,您没有正确更新Queue
。
std::string pop() {
if (!isEmpty()) {
std::string temp = first->data;
Node* tpointer = first;
if ( first == last )
{
first = last = NULL;
}
else
{
first = first->next;
}
delete tpointer;
return temp;
}
return "";
}