2011-12-07 15 views
2

私は学校のプロジェクトに取り組んでおり、私はいくつかの問題に挑戦しています。私は最近、同じプロジェクトについての質問hereを尋ね、その問題を解決しましたが、私は修正する知識がない別の問題に直面しています。だから私はここで何をすべきかもう一度尋ねる。テンプレートクラスから継承する

固定長の文字列を保持するテンプレートクラスを作成しました。ここで、テンプレート引数は文字列の長さです。テンプレートクラスから継承して数字だけを受け入れる固定長の文字列を作成しようとしています。私の問題は、クラス定義を正しく動作させることができないということです。新しいクラスを次のようなテンプレートにしない場合:

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 
    } 
}; 
関連する問題