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

[0] Índice de Mensajes

Ir a la versión completa