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:
Ahora el codigo
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 [Seleccionar]
"/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 (cpp) [Seleccionar]
#include <cstdlib>
#include "Pila.h"
using namespace std;
int main(int argc, char** argv) {
Pila<int> pila(10); //Creando una pila de enteros de 10 espacios
return 0;
}
Código (cpp) [Seleccionar]
#ifndef PILA_H
#define PILA_H
template <class T>
class Pila {
public:
Pila(int t);
Pila(const Pila& orig);
virtual ~Pila();
void push(T e);
T pop();
bool isEmpty();
bool isFull();
private:
int tam; // El tamanio del arreglo
int top; // La posicion del ultimo elemento
T *arreglo;
};
#endif /* PILA_H */
Código (cpp) [Seleccionar]
#include "Pila.h"
#include <iostream>
template <class T>
Pila<T>::Pila(int t) {
this->tam = t;
this->top = -1;
this->arreglo = new T[tam];
}
template <class T>
Pila<T>::Pila(const Pila& orig) {
// Por implementar
}
template <class T>
Pila<T>::~Pila() {
delete []arreglo;
}
/*
* Funcion que agrega un elemento a la pila.
*/
template <class T>
void Pila<T>::push(T e){
if(isFull()){
//cout << "\nLa pila esta llena\n";
}else{
arreglo[++top] = e;
}
}
/**
* Funcion que obtiene un elemento de la pila.
* @return El elemento que esta el tope de la pila.
*/
template <class T>
T Pila<T>::pop(){
if(isEmpty()){
//cout << "\nLa pila esta vacia\n";
}else{
return arreglo[top--];
}
}
/*
* Funcion que revisa si la pila esta vacia
*/
template <class T>
bool Pila<T>::isEmpty(){
if(top == -1){
return true;
}
}
/*
* Funcion que revisa si la pila esta llena
*/
template <class T>
bool Pila<T>::isFull(){
if(top == tam){
return true;
}
}