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 originalarbol * dePostaArbol(string cadena){
string buf; // Have a buffer string
pilaArbol stack_tree= pilaArbol();
pilaArbol * pPila;
arbol * salida = NULL; //La formula en postfija
arbol* pab;
stringstream ss (cadena); // Inserta la cadena en un stream que separa tokens por " "
while (ss >> buf){
if (buf.compare("DIA")==0){//OPERADOR DIAMANTE
insertarOperadorEnPila(stack_tree,-1);//DIA == -1
}else if (buf.compare("BOX")==0){//OPEEADOR CAJA
insertarOperadorEnPila(stack_tree,-2);//BOX == -2
}else if (buf.compare("NOT")==0){//NEGACION
insertarOperadorEnPila(stack_tree,-3);//DIA == -3
}else if (buf.compare("AND")==0){//OPERADOR AND1
insertarOperadorEnPila(stack_tree,-4);//DIA == -4
}else if (buf.compare("OR")==0){//OPERADOR OR
insertarOperadorEnPila(stack_tree,-5);//DIA == -5
}else if (buf.compare("IMPLIES")==0){//IMPLICACION
insertarOperadorEnPila(stack_tree,-6);//DIA == -6
}else{//OPERANDO...
int valorOperador;
pab= new arbol();
valorOperador=codifica(buf);
pab->setValor(valorOperador);
stack_tree.Push(pab);
}
pPila=&stack_tree;
}
if (stack_tree.isEmpty()){
cout<<"Error: El algoritmo de conversion de postfija a arbol ha fallado..."<<endl;
stack_tree.destruir();
}else{
salida=stack_tree.Pop();
if(stack_tree.isEmpty()){
stack_tree.destruir();
return salida;
}else{
cout<<"Error: El algoritmo de conversion de postfija a arbol ha fallado..."<<endl;
stack_tree.destruir();
}
}
}
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?.