Página 1 de 1

Error en programa de pilas usando templates en c++

Publicado: 24 Oct 2012, 05:34
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??

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

Publicado: 24 Mar 2013, 15:50
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".

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

Publicado: 24 Mar 2013, 17:53
por m0skit0
Jajajaja ni había visto este post.

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

Publicado: 25 Mar 2013, 13:44
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!