Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/03/2013, 05:55
efdarcy09
 
Fecha de Ingreso: marzo-2013
Mensajes: 10
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Duda sobre c++. Se pierden datos al salir de un while.

La variable a la que me refiero a a stack_tree.

Creo que es esto a lo que te refieres que haga.
Código:
Código C++:
Ver original
  1. arbol * dePostaArbol(string cadena){
  2.         string buf; // Have a buffer string
  3.         pilaArbol stack_tree= pilaArbol();
  4.         pilaArbol * pPila;
  5.         arbol * salida = NULL; //La formula en postfija
  6.         arbol* pab;
  7.         stringstream ss (cadena); // Inserta la cadena en un stream que separa tokens por " "
  8.         while (ss >> buf){
  9.             if (buf.compare("DIA")==0){//OPERADOR DIAMANTE
  10.                 insertarOperadorEnPila(stack_tree,-1);//DIA == -1
  11.             }else if (buf.compare("BOX")==0){//OPEEADOR CAJA
  12.                 insertarOperadorEnPila(stack_tree,-2);//BOX == -2
  13.             }else if (buf.compare("NOT")==0){//NEGACION
  14.                 insertarOperadorEnPila(stack_tree,-3);//DIA == -3
  15.             }else if (buf.compare("AND")==0){//OPERADOR AND1
  16.                 insertarOperadorEnPila(stack_tree,-4);//DIA == -4
  17.             }else if (buf.compare("OR")==0){//OPERADOR OR
  18.                 insertarOperadorEnPila(stack_tree,-5);//DIA == -5
  19.             }else if (buf.compare("IMPLIES")==0){//IMPLICACION
  20.                 insertarOperadorEnPila(stack_tree,-6);//DIA == -6
  21.             }else{//OPERANDO...
  22.                
  23.                 int valorOperador;
  24.                 pab= new arbol();
  25.                 valorOperador=codifica(buf);
  26.                 pab->setValor(valorOperador);
  27.                 stack_tree.Push(pab);
  28.             }
  29.             pPila=&stack_tree;
  30.         }
  31.         if (stack_tree.isEmpty()){
  32.             cout<<"Error: El algoritmo de conversion de postfija a arbol ha fallado..."<<endl;
  33.             exit (-1);
  34.             stack_tree.destruir();
  35.         }else{
  36.             salida=stack_tree.Pop();
  37.             if(stack_tree.isEmpty()){
  38.                 stack_tree.destruir();
  39.                 return salida;
  40.             }else{
  41.                 cout<<"Error: El algoritmo de conversion de postfija a arbol ha fallado..."<<endl;
  42.                 exit (-1);
  43.                 stack_tree.destruir();
  44.             }
  45.         }
  46.     }

El problema está en que al salir del bucle While, todas las referencias que hay en la pila se pierden. He probado la clase pilaArbol y funciona. No se que es lo que pasa. Es decir, cuando la condición del bucle no se cumple, sale del bucle y los punteros pierden todas las referencias, pero mientras se cumple la condición, la pila no pierde las referencias... Es muy raro, o me lo parece a mi?.

Última edición por efdarcy09; 14/03/2013 a las 06:01