2010-11-18 22 views
2

bu şey benzeri yığın veri yapısını yazdı fonk itmek derleme değilyığın şablon

template<class T> 
Stos<T>::Stos(const T& n = 0): count(1) { 
    member = new Element(n); 
} 

template<class T> 
T Stos<T>::get() { 
    return member->n; 
} 

template<class T> 
Stos<T>::Element* Stos<T>::push(const T& n = 0) { 
    Element* point = member; 
    member = new Element; 
    member->prev = point; 
    if(n != 0) member->n = n; 
    ++count; 
    return member; 
} 

template<class T> 
T Stos<T>::pop() { 
    Element* point = member; 
    T n = point->n; 
    member = point->prev; 
    --count; 
    delete point; 
    return n; 
} 

template<class T> 
void Stos<T>::mod(const T& n) { 
    member->n = n; 
} 

template<class T> 
Stos<T>::~Stos() { 
    while(member) pop(); 
} 

Ve bunu derlemeye çalıştığınızda g ++ ile, Stos::Element* Stos::push(): expected constructor, destructor, or type conversion before ‘*’ token tanımının ilk satırı hakkında bu hatayı alıyorum. İlk olarak şablonlarla bir şeyler yazmayı denemem. Bu yığın kodu, şablonlar olmadan çalışırdı, ben düzenlediğimde, hatayı aldım, her şey "T" yerine her yerde "int" ile daha önce iyi çalıştı.

Ve neden derleme olmadığını anlayamıyorum. İşaretçi sınıf :: üye kullanamaz mıyım?

cevap

2

Ayrıca kullanmayı düşünmelisiniz bu neden gerekli olduğunu tam açıklaması için bir bağlantı typename

typename Stos<T>::Element* Stos<T>::push(const T& n = 0) 

ile adını Element önüne eklemeniz gerekebilir

0 yerine tüm olası T mümkün olabilir değil beri

const T &n = 0 

ait

0'dan başlatılması için!

+0

sorununun herhangi bir yerinde yer alsa bile, ben sadece bilinmeyen T ;-) ile argüman olmadan push() kullanmasına izin vermemeliyim. – silmeth