• Viernes 19 de Abril de 2024, 18:43

Autor Tema:  Problemas sobre plantillas  (Leído 1602 veces)

saudiaz

  • Miembro activo
  • **
  • Mensajes: 51
  • Nacionalidad: sv
    • Ver Perfil
Problemas sobre plantillas
« en: Miércoles 14 de Abril de 2010, 19:38 »
0
Este programa me tiene que almacenar Ncantidades de cualquier tipo por el momento lo estoy haciendo de tipo Float el problema es que me da error en el primer if... y no entiendo por que espero me ayuden ...

Les agradesere de antemana. Por cierto las funciones adicionales las ocupara luego


#include<iostream>
#include<conio.h>
#include<math.h>

using namespace std;
#define Ncantidad
template <class Tipo> class CMuestra{
         Tipo pila_bufer[Ncantidad];
         Tipo Valor
         int indice;
         public:
               void CMuestra(tipo v, tipo i){
                    Valor=v;
                    indice=i;
                    }
               
                void iniciar_indice(){
                     indice=0;
                     }
                void guardar_valores();
                void mostrar_valores();
               // void calcular_porcentaje();
                //void ordenar_ascendente();
                //void ordenar_descendente();
               // void umbral_superfior();
                //void umbral_inferior();
         
         };
template <class Tipo> void CMuestra<Tipo>::guardar_valores()
      {
      if(indice==Ncantidad){
         cout<<"n Supero su capacidad de Almacenamiento";
         return 0;
         }
                 
         pila_bufer[indice]=Valor;
         indice++;
      }
template <class Tipo> void CMuestra<Tipo>::mostrar_valores()
      {
       if(indice==0)
         {
         cout<<"nn Sus datos ya fueron mostrados";
         return 0;
         }    
         indice--;
         cout<<pila_bufer[indice]<<endl;    
      }  
main()
   {
   CMuestra<float> Muestra01;
   
   cout<<"n Cuantos datos desea Introducir: ";
   cin>>Ncantidad;
   for(int i=0;i<=Ncantidad;i++)
     {
     Muestra01.guardar_valores();
     }
   cout<<"n Mostrando Valores: ";
    for(int i=0;i<=Ncantidad;i++)
       {
       Muestra01.mostrar_valores();    
       }
         
   getch();  
   return 0;  
   }

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas sobre plantillas
« Respuesta #1 en: Miércoles 14 de Abril de 2010, 23:07 »
0
Buenas.
Fijate de usar etiquetas de codigo para que sea mas facil leer.


Código: C++
  1.  
  2. #define Ncantidad
  3.  
  4. if(indice==Ncantidad)
  5.  
  6.  

Estas definiendo Ncantidad como una constante simbolica VACIA, cuando el preprocesador lee tu codigo, reemplaza Ncantidad por nada, por lo que al momento de compilar tu codigo queda:
if(indice==)
Lo que obviamente presenta un error de semantica.
Eso tambien te deberia generar errores en otros lugares del programa, como en los bucles for.

deberias darla un valor a esta constante, como
#define Ncantidad 50

Saludos
The sweet smell of a great sorrow lies over the land.


saudiaz

  • Miembro activo
  • **
  • Mensajes: 51
  • Nacionalidad: sv
    • Ver Perfil
Re: Problemas sobre plantillas
« Respuesta #2 en: Miércoles 14 de Abril de 2010, 23:50 »
0
le comprendo colega y muchas gracias, aun soy un aprendis. El problema es que no le doy un numero directo como #define Ncantidad 5 porque quiero que esa variable me almacene Ncantidades ya sea 50 100 o 1000000 ahora dime, como lo puedo hacer

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas sobre plantillas
« Respuesta #3 en: Jueves 15 de Abril de 2010, 00:21 »
0
en tu codigo Ncantidad es un constante (simbolica), no una variable, por lo que no le podes cambiar el valor deurante la ejecucion.

Tendrias que hacer que sea una variable (int Ncantidad) perteneciente a la clase, si la declaras de ambito publico va a ser accesible desde todas las funciones, sino se la tenes que pasar como parametro a cada funcion.

Tene en cuanta que esto:
 Tipo pila_bufer[Ncantidad];
no esta permitido con variables, por lo que vas a tener que reemplazarlo por algo como

Tipo *pila_bufer;

y despues en el contructor de la clase

pila_bufer = new Tipo[Ncantidad];

y luego en el destructor

delete[] pila_bufer;

ahi podes trabajar con pila_bufer como se fuese una array, por ejemplo pila_bufer[8] = variable;

Saludos
The sweet smell of a great sorrow lies over the land.


saudiaz

  • Miembro activo
  • **
  • Mensajes: 51
  • Nacionalidad: sv
    • Ver Perfil
Re: Problemas sobre plantillas
« Respuesta #4 en: Jueves 15 de Abril de 2010, 01:03 »
0
colega cree que puede ser mas especifico hago los cambios como creo y no funciona

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas sobre plantillas
« Respuesta #5 en: Jueves 15 de Abril de 2010, 01:45 »
0
seria algo asi

Código: C++
  1.  
  2.  
  3. template <class Tipo>
  4. class CMuestra
  5. {
  6.   public:
  7.     cMuestra(int c);
  8.     ~cMuestra();
  9.     void guardar(Tipo valor);
  10.     void mostrar();
  11.   private:
  12.     int indice;
  13.     int Ncantidad;
  14.     Tipo *pila_bufer;
  15. };
  16.  
  17. template <class Tipo>
  18. cMuestra<Tipo>::cMuestra(int c)
  19. {
  20.   indice = 0;
  21.   pila_bufer = new Tipo[c];
  22.   Ncantidad = c;
  23. }
  24.  
  25. template <class Tipo>
  26. cMuestra<Tipo>::~cMuestra()
  27. {
  28.   delete[] pila_bufer;
  29. }
  30.  
  31.  
  32. template <class Tipo>
  33. void cMuestra<Tipo>::guardar(Tipo valor)
  34. {
  35.   if(indice < Ncantidad)
  36.   {
  37.     pila_bufer[indice] = valor;
  38.     indice++;
  39.   }
  40. }
  41.  
  42. template <class Tipo>
  43. void cMuestra<Tipo>::mostrar()
  44. {
  45.   if(indice >= 0)
  46.   {
  47.     cout << pila_bufer[indice] << endl;
  48.     indice--;
  49.   }
  50. }
  51.  
  52.  

Saludos
The sweet smell of a great sorrow lies over the land.