我寫了這個東西樣堆棧數據結構:堆模板不編譯推FUNC
template<class T>
class Stos {
class Element {
public:
T n;
Element* prev;
Element(const T& k = 0): n(k), prev(0) {}
};
Element* member;
Stos(Stos&);
public:
Stos(const T&);
~Stos();
unsigned int count;
T get();
Element* push(const T&);
T pop();
void mod(const T&);
};
與實現(同一個文件):
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();
}
當我嘗試編譯用g ++,我得到關於Stos::Element* Stos::push()
定義的第一行的這個錯誤:expected constructor, destructor, or type conversion before ‘*’ token
。這是我第一次嘗試用模板寫東西。這個堆棧代碼在沒有模板的情況下工作,當我編輯它的時候,然後我得到了錯誤,所有的東西都很好用,而且每個地方都用「int」而不是「T」。
而我找不出爲什麼它不編譯。我不能使用指向class :: member的指針嗎?
謝謝,它的工作原理。 – silmeth 2010-11-18 20:04:55
當問題被標記爲C++,並且在主題中發現「模板」和「編譯」時,StackOverflow應該自動地「你需要類型名稱」。 – 2010-11-18 20:06:14
即使「從VS移植」被包含在問題的某處:-) – mmmmmmmm 2010-11-18 21:31:49