[C con Clase] Fwd: Errores de linkado de pila con templates

tikitita guanxita en gmail.com
Mar Mar 13 23:15:34 CET 2007


Hola de nuevo steven, he estado ahi mirando los errores y los he podido
corregir hasta que me ha dado 0 errores de compilacion y de linkado pero al
ejecutar me sale el pantallazo de windows de enviar errores o no.... no
tiene muy buena pinta

El día 13/03/07, tikitita <guanxita en gmail.com> escribió:
>
> La verdad es que no, te comento que hice algunos cambios, el problema es
> que tb uso una cola, una clase fichero, una lista dinamica y un gestor, y el
> problema viene cuando desde gestor le digo a la pila que quiero una para las
> variables y otra para los operadores. Bien pues al hacer el cambio que tu me
> has dicho de meter el .h en el .cpp me ha salido otro error en una de las
> funciones, que corregi y misteriosamente me salieron 0 errores, pero al
> ejecutar peto... ohhhh , asi que opte por meter las variables de las pilas
> en el main y me saltaron varios errores....
>
> bueno  te adjunto todo x si tu ves algo...
>
>  error C2065: 'operandos' : undeclared identifier
> gestor.cpp(62) : error C2228: left of '.mostrar' must have
> class/struct/union type
> gestor.cpp (63) : error C2228: left of '.extraer' must have
> class/struct/union type
> gestor.cpp(65) : error C2228: left of '.extraer' must have
> class/struct/union type
> gestor.cpp(67) : error C2065: 'operador' : undeclared identifier
> estor.cpp(85) : error C2228: left of '.insertar' must have
> class/struct/union type
>
>
> ****gestos.cpp*******
> #include "cola.h"
> #include "fichero.h"
> #include "lista.h"
> #include "pila.cpp"
> #include <cstdlib>
> #include <string>
> using namespace std;
>
>
>
>
>
> cola buffer2;
> string V=NULL;//string donde vamos a guardar las variables
> string N=NULL;
> lista variables;
>
> //Vamos a diferenciar cuando es variable y cuando es valor
> //true -> variable, false ->valor
>
> bool reconocer (char palabra) {
>
>     string aux= "0123456789.";
>     char* aux2;
>     aux2= (char*)memchr(aux.c_str(),palabra,11);
>
>     if (aux2==NULL){
>
>         return true;//variable
>
>     }else{
>
>         return false;//valor
>
>     }
>
> }
>
> bool reconocerop (char operador) {
>
>     string aux= "+-/*^()";
>     char* aux2;
>     aux2= (char*)memchr(aux.c_str(),operador,7);
>
>     if (aux2==NULL){
>
>         return true;//no operador
>
>     }else{
>
>         return false;//operador
>
>     }
>
> }
>
>
> void operacion (){
>
>     float A;
>     float B;
>     A=operandos.mostrar();
>     operandos.extraer();
>     B=operandos.mostrar();
>     operandos.extraer();
>     char op;
>     op=operador.mostrar();
>     operador.extraer();
>     switch (op) {
>
>     case '+': operandos.insertar(A+B);
>         break;
>     case'-': operandos.insertar(A-B);
>         break;
>     case'/': if(B!=0){
>              operandos.insertar(A/B);
>              }
>         break;
>     case'*': operandos.insertar(A*B);
>         break;
>     case '^': float aux=1;
>         for (int i=1;i<=B; i++){
>                 aux=aux*A;
>         }
>             operandos.insertar(aux);
>         break;
>     }
> }
>
> bool precedencia(char op1, char op2) {
>
>     if ((op1=='(')&&(op1==')')){
>         return true;
>     }else{
>         if((op1=='^')&&((op2=='('))||(op2==')')){
>             return false;
>         }else{
>
> if(((op1=='*')||(op1=='/'))&&(((op2=='(')||(op2==')')||(op2=='^')))){
>                 return false;
>             }else{
>                 return false;
>             }
>         }
>     }
>     return true;
> }
>
>
>
>
>
> void calcularexpresion (char numeritos) {
>
>     if (N!=""){
>         operandos.insertar(variables.buscar(N.c_str()));//insertamos en
> pila de operadores
>     }
>     if (buffer2.mostrar()=='('){
>         operador.insertar(buffer2.mostrar ());
>     }
>     if (buffer2.mostrar()==')'){
>
>         while (operador.mostrar()=='('){
>             operacion();
>         }
>         operador.extraer();
>     }
>
>
>     if (!reconocerop( buffer2.mostrar())){
>         if((operador.esvacia())&&(buffer2.mostrar()=='(')){
>             operador.insertar(buffer2.mostrar());
>         }
>
>         if(precedencia(buffer2.mostrar(),operador.mostrar ())){
>             operacion();
>             operador.insertar(buffer2.mostrar());
>         }else{
>             operador.insertar(buffer2.mostrar());
>         }
>     }
>
>
>
>
>
>
> }
>
>
>
> void main(){
>
> //Declaracion de variables
>
>
> pila<char> operador;// en caso de templates meter <int>
> pila<int> operandos;//en caso de templates meter <char>
>
> string f;
>
>
>
> cout<<"Introduzca el nombre del fichero"<<endl;
> cin>>f;
>
> fichero texto(f);//ruta donde estara el fichero que vamos a leer
>
> buffer2=texto.guardarbuffer();
>
>
>
> bool cambio=true;
> bool expresion=false;
>
> while (!texto.fin()){// mientras el fichero no llegue a su fin
>     while (buffer2.size()!=0){// y el buffer no este vacio
>
>
>         if (reconocer(buffer2.mostrar())){
>
>             if (reconocerop(buffer2.mostrar())){
>
>                 if (cambio){
>                     V+=buffer2.mostrar();
>                     buffer2.extraer();
>                 }else{
>                     if (N==""){
>                         calcularexpresion(buffer2.mostrar());
>                         buffer2.extraer();
>                         N="";
>                     }else{
>                         variables.insertar (V, atof(N.c_str()));
>                         cambio=true;
>                         V=buffer2.mostrar();
>                         buffer2.extraer();
>                         N="";
>                     }
>                 }
>
>             }else{
>                 calcularexpresion(buffer2.mostrar());
>                 buffer2.extraer();
>             }
>
>             }else{
>                 while (!reconocer(buffer2.mostrar())){
>                 N+=buffer2.mostrar();
>                 buffer2.extraer();
>                 cambio=false;
>                 }
>                 if (V==""){
>                     operandos.insertar(atof(N.c_str()));//insertamos
> numero en pila de operandos
>                     V="";
>                     N="";
>                 }
>
>             }
>         }
>
>         buffer2=texto.guardarbuffer();
>
>     }
>
>
> cout<<operandos.mostrar();
>
> }
>
> El día 13/03/07, Steven Davidson <steven en conclase.net> escribió:
> >
> > Hola Tikitita,
> >
> > El pasado 2007-03-13 20:53:15, tikitita escribió:
> >
> > t> Nada Steve, no hay manera,,, no le gusta a la pila, dice que
> > nanai.... :( lo
> > t> hice tal como tu dices pero hay algo que no le mola...
> >
> > Me parece raro, porque no he visto nada problemático con tu código. De
> > hecho, lo acabo de usar en un programa sencillo, y no he tenido problema
> > alguno. Por lo tanto, me hace sospechar que el problema esté en cómo usas la
> > plantilla 'pila'. Por ejemplo, escribí lo siguiente:
> >
> > using namespace std;
> >
> > int main()
> > {
> >   pila<int> pi;
> >   pi.insertar( 10 );
> >   pi.mostrar();
> >
> >   cin.get();
> >   return 0;
> > }
> >
> > Por si acaso, te comento que no agregué el fichero de "pila" en el
> > proyecto. Usando Dev-C++, éste intentó enlazar " pila.o" al programa, el
> > cual obviamente no va a existir.
> >
> >
> > Espero que algo de esto te ayude.
> >
> > Steven
> > _______________________________________________
> > Lista de correo Cconclase Cconclase en listas.conclase.net
> >
> > http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> >
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070314/1f110bf5/attachment.html>


Más información sobre la lista de distribución Cconclase