simples simple resueltos operaciones listas lista ligadas estructura enlazadas enlazada ejercicios ejemplos doblemente datos con codigo c++ linked-list operator-overloading

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 */ }