Error en programa de pilas usando templates en c++

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06

Responder
Avatar de Usuario
ZackM77
Habitual
Habitual
Mensajes: 174
Registrado: 24 Ene 2010, 11:20
Ubicación: My dreams

Error en programa de pilas usando templates en c++

Mensaje por ZackM77 »

Que tal!!, resulta que al hacer un programa de pilas me da el siguiente error al usar la funcion push, y no se porque ;(
pila .h

Código: Seleccionar todo

#include<iostream>
using namespace std;

template<typename T>

class Pila
{
private:
    struct Nodos
    {
        T element;
        Nodos *Siguente;
    } *ultimo;
unsigned int elementos;
public:
    Pila();
    ~Pila();
    void push( const T &nuevo);
    T pop();
    T & Cima();
    bool vacia();
    unsigned int Altura();
};


pila.cpp

Código: Seleccionar todo

#include"pila.h"

template<typename T>
Pila<T>::Pila()
{
    elementos=0;

}
template<typename T>
Pila<T>::~Pila()
{
    while(elementos!=0)
    {
        pop();
    }

}
template<typename T>
void Pila<T>::push( const T &nuevo)
{
   
    Nodos *aux= new Nodos;
    aux->element=nuevo;
    aux->Siguente=ultimo;
    ultimo=aux;
    elementos++;
}
template<typename T>
T Pila<T>::pop()
{
    T Salvado;
    Nodos *aux=ultimo;
    Salvado=aux->element;
    ultimo=ultimo->Siguente;
    delete aux;
    elementos--;
    return Salvado;
}
template<typename T>
T &Pila<T>::Cima()
{
    return ultimo->element;
}
template<typename T>
bool Pila<T>::vacia()
{
    if(elementos==0)
        return true;
    else
        return false;
}
template<typename T>
unsigned int Pila<T>::Altura()
{
    return elementos;
}


Código: Seleccionar todo

#include"pila.h"
#include<string>
main.cpp
int main()
{
    int a,v,b;
    Pila<int > pilas();

    a=2;
    v=24;
    b=2345;
    pilas.push(a);

    cout << "Hello World!" << endl;
    return 0;
}


y me da este error:

main.cpp:11: error: request for member 'push' in 'pilas', which is of non-class type 'Pila<int>()'
porque???

ya resolvi el problema resulta que en el include del main en lugar de incluir el .h debo de incluir el .cpp

de esta manera.

#include"pila.cpp"
aunque ahora surge la pregunta porque??
Imagen

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: Error en programa de pilas usando templates en c++

Mensaje por Yn$an€ »

El compilador crea sus propias clases basándose en la implementación de la clase genérica para cada tipo de dato con el que se creen instancias de la plantilla, con lo que debe tener acceso a dicha implementación. Una forma de solucionarlo es incluír la implementación al final de la cabecera. Otra es crear instancias de forma explícita en la cabecera. La tercera es la que usas tú, aunque tiene la desventaja de que no separas declaraciones de implementación.

O de cómo C++ necesita de 10 cosas diferentes que al programador medio no le dicen nada y sólo sirven para enredar.

Me otorgo a mí mismo el rango de Necromancer con un ulti que se llama "resucitar hilos muertos de programación".
... after all, we're all alike.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Error en programa de pilas usando templates en c++

Mensaje por m0skit0 »

Jajajaja ni había visto este post.
Imagen

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: Error en programa de pilas usando templates en c++

Mensaje por Yn$an€ »

Yo hacía tiempo que no me pasaba, pero ahora que estoy de vacaciones era el momento de recuperar las buenas costumbres :)

Un saludo!
... after all, we're all alike.

Responder