Что не так с моей структурой очереди строк? - PullRequest
1 голос
/ 12 марта 2019

Я не могу заставить это работать должным образом, я пытаюсь создать файл заголовка для очереди строк, который имеет функции для 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

Я получаю кучу ошибок, в которых говорится, что «данные не являются членами узла», «данные - это необъявленный идентификатор», «данные - неизвестный спецификатор переопределения». Я бы скопировал / вставил свой список ошибок, но я не знаю, как это легко сделать.

Редактировать: Теперь я исправил 4 ошибки после исправления моих строковых объявлений: pop не является членом строки 17 очереди, pop неизвестный переопределитель строки 50, синтаксическая ошибка (строка 50, неожиданный токен, предшествующий {строка 50

1 Ответ

2 голосов
/ 12 марта 2019
  1. Убедитесь, что вы используете #include <string>.
  2. Вместо string data;, используйте std::string data;.
  3. Используйте 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 "";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...