Programación General > C/C++
Problema con proyecto de arboles (Imprime direccioens de mem
(1/1)
Phas:
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 ---ostream & operator << (ostream & os, const nTreeLNode<int> * t){ os << t; return os;} ostream & operator << (ostream & os, const nTreeLNode<int> & t){ if (t.isLeaf(t.root())) // El arbol solo es un nodo raiz { os << "Arbol (" << t.label(t.root()) << ")"; return os; } LNode<int> * hijo = t.leftMostChild (t.root()); os << " Arbol (" << t.label(t.root()); while (hijo) { os << ", " << t.subTree(hijo); hijo = t.rightSibling (hijo); } os << ")"; return os;}
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 ---ostream & operator << (ostream & os, const nTreeLNode<int> * t){ os << *t; return os;} ostream & operator << (ostream & os, const nTreeLNode<int> & t){ if (t.isLeaf(t.root())) // El arbol solo es un nodo raiz { os << "Arbol (" << t.label(t.root()) << ")"; return os; } LNode<int> * hijo = t.leftMostChild (t.root()); os << " Arbol (" << t.label(t.root()); while (hijo) { os << ", " << t.subTree(hijo); hijo = t.rightSibling (hijo); } os << ")"; return os;} 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:
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++ --- cout << *mypunteroaclase;
seguramente sea eso.
Si con * no funciona, es por que tendras algun problema en la definicion de los operadores de stream.
Phas:
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> *.
Navegación
Ir a la versión completa