• Domingo 15 de Diciembre de 2024, 20:04

Autor Tema:  Problema con proyecto de arboles (Imprime direccioens de mem  (Leído 1003 veces)

Phas

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Problema con proyecto de arboles (Imprime direccioens de mem
« en: Miércoles 10 de Marzo de 2010, 00:55 »
0
Hola, tengo un proyecto para una practica de la universidad de manejar arboles. LA cuestion es la siguiente: cuando intento mostrar el arbol por pantalla sobrecargué los dos operadores de salida como sigue

Código: Text
  1. ostream & operator << (ostream & os, const nTreeLNode<int> * t)
  2. {
  3.         os << t;
  4.     return os;
  5. }
  6.  
  7. ostream & operator << (ostream & os, const nTreeLNode<int> & t)
  8. {
  9.     if (t.isLeaf(t.root())) // El arbol solo es un nodo raiz
  10.     {
  11.         os << "Arbol (" << t.label(t.root()) << ")";
  12.         return os;
  13.     }
  14.    
  15.     LNode<int> * hijo = t.leftMostChild (t.root());
  16.     os << " Arbol (" << t.label(t.root());
  17.     while (hijo)
  18.     {
  19.         os << ", " << t.subTree(hijo);
  20.         hijo = t.rightSibling (hijo);
  21.     }
  22.     os << ")";
  23.     return os;
  24. }
  25.  


La cuestion es que cuando imprimo por pantalla, me salen direcciones de memoria y no el árbol. Además, yo lo había hecho de esta forma (modificacion en la linea 3):

Código: Text
  1. ostream & operator << (ostream & os, const nTreeLNode<int> * t)
  2. {
  3.         os << *t;
  4.     return os;
  5. }
  6.  
  7. ostream & operator << (ostream & os, const nTreeLNode<int> & t)
  8. {
  9.     if (t.isLeaf(t.root())) // El arbol solo es un nodo raiz
  10.     {
  11.         os << "Arbol (" << t.label(t.root()) << ")";
  12.         return os;
  13.     }
  14.    
  15.     LNode<int> * hijo = t.leftMostChild (t.root());
  16.     os << " Arbol (" << t.label(t.root());
  17.     while (hijo)
  18.     {
  19.         os << ", " << t.subTree(hijo);
  20.         hijo = t.rightSibling (hijo);
  21.     }
  22.     os << ")";
  23.     return os;
  24. }
  25.  
  26.  
Pero poniendo el * delante del arbol linea 3 no me compila mostrandome un error de candidatos o no seq. La verdad es que estoy algo bloqueao. Me podeis echar una mano? Si necesitais ver código de algun archivo o algo decirlo.

Muchas gracias

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Problema con proyecto de arboles (Imprime direccioens de mem
« Respuesta #1 en: Miércoles 10 de Marzo de 2010, 19:58 »
0
wenas:

lo mas probable es que lo que le estes pasando a cout sea el PUNTERO al objeto y no el objeto en si.
Al usar el puntero estas usando una direccion de memoria y la unica operacion de salida que hace el sistema por defecto con punteros es mostrarlos.
Puedes invocar al operador de stream usando * delante del puntero, para solicitar el uso del contenido de la direccion de memoria.

ex:
Código: C++
  1.  
  2. cout << *mypunteroaclase;
  3.  
  4.  

seguramente sea eso.
Si con * no funciona, es por que tendras algun problema en la definicion de los operadores de stream.

Phas

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Problema con proyecto de arboles (Imprime direccioens de mem
« Respuesta #2 en: Miércoles 10 de Marzo de 2010, 20:13 »
0
Eso lo hice en el segundo bloque de código que puse, si te das cuenta, pero es que me da un error de compilación de no se que de 'candidates'. Y por más vueltas que le doy no tengo ni idea de qué puede ser :(

Y sí, es un puntero al objeto ya que el árbol t es  un nTreeLNode <T> *.