Debo armar una lista doblemente enlazada, pero se me presentó un error que no puedo solucionar:
Clase nodo
Es importante destacar que esta clase hace uso de template
para aceptar cualquier formato.
#ifndef nodo_h
#define nodo_h
#include <iostream>
using namespace std;
template<class type>
class nodo
{
private:
type element;
nodo *next, *previous;
public:
void SetElement(type element);
void ShowElement();
type GetElement();
nodo<type>* GetNext();
nodo<type>* GetPrevious();
nodo<type>();
~nodo<type>();
};
Clase lista8
Los problemas se presentan en los procedimientos SetFirst
y SetLast
olvidé decir que esta lista debe también usa template
para poder enviar variables desde main
, osea que accede primero a lista8
donde hay una lista aún no definida de la clase nodo
#ifndef lista8_h
#define lista8_h
#include "nodo.h"
template<class type>
class lista8
{
private:
nodo<type> *first, *last;
public:
void SetFirst(type NewElement); //<-error
void SetLast(type NewElement); //<-error
int ClearFirst();
int ClearLast();
void ShowList(nodo<type> *list);
nodo<type>* GetFirst();
nodo<type>* GetLast();
lista8<type>();
~lista8<type>();
};
Aqui está el código de SetFirst
y SetLast
, incluyendo donde está el error,
el error que visual studio me muestra es lo que dice en el título.
(siendo más específicos, dice: C2106 '=': el operando debe ser valor L)
Donde dice 'error que esperaba' es donde imaginé que también aparecería éste error, pero curiosamente, no me dice que sea incorrecto.
template<class type>
void lista8<type>::SetFirst(type NewElement)
{
if (first == NULL)
{
first = new nodo<type>; //<--error que esperaba
last = first;
}
else
{
first->GetPrevious() = new nodo<type>; //<--error
first->GetPrevious()->GetNext() = first; //<--error
first = first->GetPrevious();
}
first->SetElement(NewElement);
}
template<class type>
void lista8<type>::SetLast(type NewElement)
{
if (last == NULL)
{
last = new nodo<type>; //<--error que esperaba
first = last;
}
else
{
last->GetNext() = new nodo<type>; //<--error
last->GetNext()->GetPrevious() = last; //<--error
last = last->GetNext();
}
last->SetElement(NewElement);
}