2011-12-07 182 views
2

我正在爲一所學校的項目工作,並遇到一些我想要回答的問題。我最近問了一個關於同一個項目的問題here,並且解決了這個問題,但是現在我面臨另一個我沒有修復知識的問題。所以我在這裏再次問我該怎麼做。從模板類繼承

我創建了一個模板類,它包含一個固定長度的字符串,其中template參數是字符串的長度,現在我試圖從模板類繼承來創建一個只接受數字的字符串,並且是一個固定長度。我的問題是我無法讓類定義正常工作。當我不作新類這樣的一個模板:

class DigitStr: public FixedStr<N> 

它說,N是一個未聲明的標識符。然而,當我變成一個模版是這樣的:

template <int N> 
class DigitStr: public FixedStr<N> 

那麼所有的方法,正常工作並給任一個未聲明的標識符或者需要模板參數。我試着寫構造函數的方法是:

DigitStr::DigitStr() 

DigitStr<N>::DigitStr() 

因此,沒有人看到這裏的問題?任何幫助將不勝感激。

+0

您需要'N'的實際值。 – ildjarn

回答

0

您需要重新定義您的.CPP文件中的模板類型:

template <int N> 
DigitStr<N>::DigitStr(){ 
    //your code here 
} 
+0

啊謝謝你。我不能相信我錯過了這一點。 – triple07

+2

模板在.cpp文件中效果不佳。 – Pubby

2

我不完全理解你的問題,但是這可能會幫助:

template <int N> 
class DigitStr: public FixedStr<N> { 
    DigitStr() { 
    // in-class constructor 
    } 
    ~DigitStr(); 
}; 

template <int N> 
DigitStr<N>::~DigitString() { 
    // out of class destructor 
} 

您需要使用this使用依賴模板庫中的成員:

template <int N> 
class DigitStr: public FixedStr<N> { 
    void foo() { 
    this->bar(); // call inherited member function 
    this->baz = 5; // set inherited member 
    } 
};