c++ - resueltos - listas simples estructura de datos
C++-Código de la lista enlazada-LNode no se declaró en este ámbito (3)
Como la sobrecarga del operator<<
es una función que no es miembro, deberá usar LList::LNode
.
ostream & operator << (ostream & outs, const LList & L){
LList::LNode *np;
// ^^^^^
np=L.first;
while(np!=NULL){
outs<<np->data;
np=np->next;
}
return outs;
}
Estoy escribiendo una clase para una lista vinculada en C ++ y estoy teniendo un problema al escribir la sobrecarga del operador para <<. El encabezado de mi clase es:
class LList
{
private:
struct LNode
{
LNode ();
int data;
LNode * next;
};
public:
LList ();
LList (const LList & other);
~LList ();
LList & operator = (const LList & other);
bool operator == (const LList & other);
int Size () const;
friend ostream & operator << (ostream & outs, const LList & L);
bool InsertFirst (const int & value);
bool InsertLast (const int & value);
bool DeleteFirst ();
bool DeleteLast ();
private:
LNode * first;
LNode * last;
int size;
};
y el operador es:
ostream & operator << (ostream & outs, const LList & L){
LNode *np;
np=L.first;
while(np!=NULL){
outs<<np->data;
np=np->next;
}
return outs;
}
Cuando compilo el código me sale un error:
LList.cpp: In function ‘std::ostream& operator<<(std::ostream&, const LList&)’:
LList.cpp:36:2: error: ‘LNode’ was not declared in this scope
LNode *np;
^
LList.cpp:36:9: error: ‘np’ was not declared in this scope
LNode *np;
Pensé que podría crear una instancia de una estructura dentro de una función de amigo, pero parece que eso no funciona. ¿Alguno de ustedes sabe lo que está pasando?
Como su operator<<
es una función global, necesita acceder a su clase interna con:
LList::LNode *np;
Como esta función es friend
de LList
, puede acceder a la clase LNode
privada.
Eso es porque LNode
no está en el alcance global, es una clase anidada de LList
. Tu tienes que escribir:
ostream & operator << (ostream & outs, const LList & L){
LList::LNode *np = L.first;
↑↑↑↑↑↑↑
/* rest as before */
}