pop_front () с ошибкой «назначение члена в объекте только для чтения» - PullRequest
0 голосов
/ 02 мая 2019

Что это за выражение не присваивается? Я пытаюсь реализовать двусвязный список в C ++. Это struct узла:

struct NodoLDL
{
   T dato;
   NodoLDL *anterior;
   NodoLDL *siguiente;

   NodoLDL(const T &elem, NodoLDL *ant = nullptr, NodoLDL *sig = nullptr):
      dato(elem),
      anterior(ant),
      siguiente(sig)
   {}
};

А это класс списка:

template <typename T>
class LDL
{
private:
   #include "nodoldl.h"
   size_t listSize;
   NodoLDL *listFront; //head
   NodoLDL *listBack; //tail

public:
   LDL() : listSize(0), listFront(nullptr), listBack(nullptr)
   {}
   void pop_front() const;
(. . .)
}

Это функция pop_front, я получаю сообщение об ошибке listFront = temp;, то, что я хотел сделать с кодом, находится в каждой следующей строке в качестве комментариев:

template<typename T>
void LDL<T>::pop_front() const
{
    if(empty()){
        throw invalid_argument("pop_front() on empty list");
    }else{
        NodoLDL *temp = listFront->siguiente; 
        ///temp points to the following node in the list (from listFront)

        temp->anterior = nullptr; 
        //Now that temp is at the "second" node in the list,
        //the pointer to the node before will be null, 
        //as the actual listFront will be deleted.

        delete listFront;
        //It deletes the node

        listFront = temp;
        //Now listFront is equal to temp, which is at the second node
    }
}

Почему эта логика неверна? Как я могу это исправить?

1 Ответ

1 голос
/ 02 мая 2019

Функция изменяет состояние объекта, для которого она вызывается.Не имеет смысла делать это const функцией-членом.Измените его на функцию -не const.

...