Ошибка: выражение должно иметь тип указателя на класс - PullRequest
2 голосов
/ 15 марта 2020

Я пытаюсь реализовать очередь, используя структуры. Вот сама структура:

struct Item
{
    datatype data;
    Item* next;
};

Однако, когда я пытаюсь добавить новый элемент, я получаю сообщение об ошибке:

void enqueue(Item** front, Item** rear, datatype D) { //add element to queue
    Item* temp;
    temp = new Item;
    temp->data = D;
    temp->next = NULL;
    if (*front == NULL){ // if queue is empty, make temp the first element
        *front = temp;
    }
    else { // else add it to the end
        rear->next = temp; //error is here
        *rear = temp;
    }
}

Я пытался сделать что-то подобное (*rear)->next = temp; но затем следующий остается NULL.

Не могли бы вы помочь исправить это? Благодаря.

1 Ответ

1 голос
/ 15 марта 2020

Если очередь пуста, вы назначаете только front, но rear также должен указывать на тот же Item.

if (*front == nullptr){ // if queue is empty, make temp the first element
    *front = temp;
}
else { // else add it to the end
    (*rear)->next = temp;         // <- fix like this
}
*rear = temp;                     // <- do this in both cases

В противном случае следующий объект, который вы enqueue будете использовать rear указывает на то, что вы инициализировали с самого начала, вероятно NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...