所以我一直在用Java/C#搞怪,並且有很多(顯然)忘記了如何用C++編程。C++ - 已經模板化類的繼承?
我有一個我創建的模板雙向鏈表(「Dlist」)。它被放置在一個頭文件(上帝,頭文件是奇怪的),並在CPP中實現。
所以,如果我記得小C++我知道對不對,在CPP一個FN看起來是這樣的:
//ctor
template <typename T>
Dlist<T>::Dlist()
{
first = NULL;
last = NULL;
return;
}//end fn
我想創建一個子類對這個DLIST的。在一個新的CPP,叫,說: 「stack.cpp」,我有:
#include "dlist.h"
template <typename T>
class Stack : public Dlist<T>
{
public:
//template <typename T>
void add(T *o) //these are virtual fns in dlist
{
//will call push
}
//template <typename T>
T * remove() //these are virtual fns in dlist
{
//will call pop
}
//template <typename T>
Stack()
{
//i have NO idea what to put in here
}
};//end class
但是,當我也行
Stack <double> stack;
在我INT主要(),Visual Studio中翻轉出來。
錯誤C2062:類型 '雙' 意外
錯誤C2065: '棧':未聲明的標識符
所以:我怎麼正確地創建,並調用,一個模板類的子類?
我是不是允許使用cstdlib作爲我的東西。 Yay作業!
如果編譯器抱怨'double'或許它不知道Stack是一個模板。你在主文件中包含了stack.h嗎? –
這可能是最好的選擇一本好書,並更好地熟悉C++的一般。你不會真正使用指針,或者在構造函數中進行賦值,或者在慣用C++中從構造函數中返回。 –
我沒有stack.h - 這似乎沒有必要。我是否真的必須將這些子類中的任何一個(以及任何未來的子類)分解爲兩個文件 - 一個鬆散定義的頭文件和一個已實現的cpp文件? –