[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