elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con crear una Pila Generica (y otras dudas) (ACTUALIZADO)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con crear una Pila Generica (y otras dudas) (ACTUALIZADO)  (Leído 5,781 veces)
DarkSorcerer

Desconectado Desconectado

Mensajes: 69



Ver Perfil
Problema con crear una Pila Generica (y otras dudas) (ACTUALIZADO)
« en: 21 Septiembre 2013, 10:15 am »

Estoy tratando de crear un Pila Generica, que me pueda almacenar todo tipo de datos, por ejemplo, poder crear una pila de enteros, otra de doubles, otra de floats, etc, vi que es necesario usar templates, estaba siguiendo el ejemplo de un libro cuyo autor se llama "Ellis Horowitz" pero la verdad que no lo veo muy explicativo, se salta muchos pasos, estaba buscando en otro sitio pero no puedo resolver la duda, ojala alguien me ayude.
Se me olvido decir que en la clase Pila no me deja mensajes con el "cout", me detecta error, ¿ a que se debera ? Lo deje como comentario.

Bueno, en este foro mucha gente me ha sacado de apuros, se los agradezco, ojala tambien en esta pueda salir, saltar de Java a C++ me fue un poco dificil, ahora pongo el codigo

Lo que me sale en la ventana de comandos:

Código:
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39'
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/Cygwin_4.x-Windows/repaso39.exe
make[2]: Entering directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39'
mkdir -p build/Debug/Cygwin_4.x-Windows/_ext/931385675
rm -f build/Debug/Cygwin_4.x-Windows/_ext/931385675/Pila.o.d
g++    -c -g -MMD -MP -MF build/Debug/Cygwin_4.x-Windows/_ext/931385675/Pila.o.d -o build/Debug/Cygwin_4.x-Windows/_ext/931385675/Pila.o ../Repaso39/Pila.cpp
mkdir -p dist/Debug/Cygwin_4.x-Windows
g++     -o dist/Debug/Cygwin_4.x-Windows/repaso39 build/Debug/Cygwin_4.x-Windows/_ext/931385675/Pila.o  build/Debug/Cygwin_4.x-Windows/main.o
build/Debug/Cygwin_4.x-Windows/main.o: In function `main':
/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39/main.cpp:8: undefined reference to `Pila<int>::Pila(int)'
/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39/main.cpp:10: undefined reference to `Pila<int>::~Pila()'
collect2: error: ld returned 1 exit status
nbproject/Makefile-Debug.mk:63: recipe for target `dist/Debug/Cygwin_4.x-Windows/repaso39.exe' failed
make[2]: *** [dist/Debug/Cygwin_4.x-Windows/repaso39.exe] Error 1
make[2]: Leaving directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39'
nbproject/Makefile-Debug.mk:60: recipe for target `.build-conf' failed
make[1]: *** [.build-conf] Error 2
make[1]: Leaving directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39'
nbproject/Makefile-impl.mk:39: recipe for target `.build-impl' failed
make: *** [.build-impl] Error 2


BUILD FAILED (exit value 2,, total time: 5s)

Ahora el codigo

Código
  1. #include <cstdlib>
  2. #include "Pila.h"
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char** argv) {
  7.  
  8.    Pila<int> pila(10); //Creando una pila de enteros de 10 espacios
  9.  
  10.    return 0;
  11. }
  12.  
  13.  

Código
  1. #ifndef PILA_H
  2. #define PILA_H
  3.  
  4. template <class T>
  5. class Pila {
  6. public:
  7.  
  8.    Pila(int t);
  9.    Pila(const Pila& orig);
  10.    virtual ~Pila();
  11.    void push(T e);
  12.    T pop();
  13.    bool isEmpty();
  14.    bool isFull();
  15.  
  16. private:
  17.  
  18.    int tam; // El tamanio del arreglo
  19.    int top; // La posicion del ultimo elemento
  20.    T *arreglo;
  21.  
  22. };
  23.  
  24. #endif /* PILA_H */
  25.  
  26.  

Código
  1. #include "Pila.h"
  2. #include <iostream>
  3.  
  4. template <class T>
  5. Pila<T>::Pila(int t) {
  6.  
  7.    this->tam = t;
  8.    this->top = -1;
  9.    this->arreglo = new T[tam];
  10.  
  11. }
  12.  
  13. template <class T>
  14. Pila<T>::Pila(const Pila& orig) {
  15.  
  16.    // Por implementar
  17.  
  18. }
  19.  
  20. template <class T>
  21. Pila<T>::~Pila() {
  22.  
  23.    delete []arreglo;
  24.  
  25. }
  26.  
  27. /*
  28.  * Funcion que agrega un elemento a la pila.
  29.  */
  30.  
  31. template <class T>
  32. void Pila<T>::push(T e){
  33.  
  34.    if(isFull()){
  35.  
  36.        //cout << "\nLa pila esta llena\n";
  37.  
  38.    }else{
  39.  
  40.        arreglo[++top] = e;
  41.  
  42.    }
  43.  
  44. }
  45.  
  46. /**
  47.  * Funcion que obtiene un elemento de la pila.
  48.  * @return El elemento que esta el tope de la pila.
  49.  */
  50.  
  51. template <class T>
  52. T Pila<T>::pop(){
  53.  
  54.    if(isEmpty()){
  55.  
  56.        //cout << "\nLa pila esta vacia\n";
  57.  
  58.    }else{
  59.  
  60.        return arreglo[top--];
  61.  
  62.    }
  63. }
  64.  
  65. /*
  66.  * Funcion que revisa si la pila esta vacia
  67.  */
  68.  
  69. template <class T>
  70. bool Pila<T>::isEmpty(){
  71.  
  72.    if(top == -1){
  73.  
  74.        return true;
  75.  
  76.    }
  77.  
  78. }
  79.  
  80. /*
  81.  * Funcion que revisa si la pila esta llena
  82.  */
  83.  
  84. template <class T>
  85. bool Pila<T>::isFull(){
  86.  
  87.    if(top == tam){
  88.  
  89.        return true;
  90.  
  91.    }
  92.  
  93. }
  94.  
  95.  


« Última modificación: 28 Septiembre 2013, 17:06 pm por DarkSorcerer » En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Problema con crear una Pila Generica (y otras dudas)
« Respuesta #1 en: 22 Septiembre 2013, 14:52 pm »

Cuáles son los errores que te da el compilador?


En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
DarkSorcerer

Desconectado Desconectado

Mensajes: 69



Ver Perfil
Re: Problema con crear una Pila Generica (y otras dudas)
« Respuesta #2 en: 28 Septiembre 2013, 16:48 pm »

Cuáles son los errores que te da el compilador?
Actualice el tema, donde puse los errores que me dió el compilador.
Uso Netbeans 7.3
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problema con crear una Pila Generica (y otras dudas) (ACTUALIZADO)
« Respuesta #3 en: 28 Septiembre 2013, 18:00 pm »

Primer consejo al hacer templates... TODO y repito TODO el código de un template tiene que estar en el archivo de cabecera.

La razón es que el compilador utiliza este template para generar el código específico que necesite según se vaya usando en la aplicación.

Es decir, si tu en un programa usas la pila solo para tipos int, se creará código específico únicamente para el tipo int... si usas la pila para int, float y double... se creará una clase específica para cada uno de esos tres tipos.

El código de un template, como tal, no se compila directamente, se genera bajo demanda... el código en el cpp no sirve para nada.
En línea

DarkSorcerer

Desconectado Desconectado

Mensajes: 69



Ver Perfil
Re: Problema con crear una Pila Generica (y otras dudas) (ACTUALIZADO)
« Respuesta #4 en: 28 Septiembre 2013, 20:00 pm »

Primer consejo al hacer templates... TODO y repito TODO el código de un template tiene que estar en el archivo de cabecera.

La razón es que el compilador utiliza este template para generar el código específico que necesite según se vaya usando en la aplicación.

Es decir, si tu en un programa usas la pila solo para tipos int, se creará código específico únicamente para el tipo int... si usas la pila para int, float y double... se creará una clase específica para cada uno de esos tres tipos.

El código de un template, como tal, no se compila directamente, se genera bajo demanda... el código en el cpp no sirve para nada.
¿ Entonces debo implementar todo en el .h ?
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problema con crear una Pila Generica (y otras dudas) (ACTUALIZADO)
« Respuesta #5 en: 28 Septiembre 2013, 20:10 pm »

si
En línea

DarkSorcerer

Desconectado Desconectado

Mensajes: 69



Ver Perfil
Re: Problema con crear una Pila Generica (y otras dudas) (ACTUALIZADO)
« Respuesta #6 en: 28 Septiembre 2013, 23:43 pm »

Gracias, ahora pude solucionar mi problema y logré el resultado que quería.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
GTX 650 TI para fuente genérica 500w.
Hardware
ScareWoW 3 4,098 Último mensaje 30 Diciembre 2013, 02:15 am
por 0x98364
Lista Genérica en c
Programación C/C++
elProfeta1979 3 3,180 Último mensaje 13 Octubre 2014, 17:13 pm
por rir3760
Crear apk [dudas]
Programación General
wblack 2 2,399 Último mensaje 22 Julio 2015, 02:52 am
por wblack
Configuración genérica en Windows 7
Windows
senseye3led 0 1,650 Último mensaje 19 Diciembre 2015, 13:27 pm
por senseye3led
¿Es normal que una fuente real caliente más que una genérica?
Hardware
Br1ant 0 1,708 Último mensaje 24 Abril 2016, 10:59 am
por Br1ant
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines