2012-04-04 6 views
0

私は2つのコンポーネント、ランダムクラス型Tと整数を取るクラスを書いて、私は次のようにそれを実装:TEST.Hで のように:C++で汎用クラスからオブジェクトを作成するには?

template <class A, int B>class Test { // two components, 
    private: 
     A first; 
     int second; 

    public: 
     Test(); 
     Test (A,int); 
    } 

Test.cppのでは、私がやった:

template <class T,int i> Test<T,i>::Test() {} 
    template <class A,int i>Test<A,i>::Test(T a, int b):first(a) {second=b;} 

しかし、主な機能は:私は、オブジェクトinstancを宣言することができますどのように

Test<int, int > T1; //It can not be passed 
    Test<int, 4> T2; //It can not be passed 
    int x = 8; 
    Test<int, x> T3 (3,4);// can not be passed 

上記の汎用クラスのe?

+2

Sigh。 http://www.parashift.com/c++-faq-lite/templates.html#faq-35.15 –

+3

適切な用語は「クラステンプレート」です。 「汎用」という言葉は、他の言語では非常に異なる意味を持つため、この文脈では少し危険です。 –

+0

Testクラスのオブジェクトをどのように宣言できますか?これが問題です。おい、私はそれを必要とする.... – ToBeGeek

答えて

0

クラステンプレート定義の最後にセミコロンを忘れてしまった。

0
template <class T,int i> Test<T,i>::Test() {} 
template <class A,int i>Test<A,i>::Test(T a, int b):first(a) {second=b;} 

あなたが.cppではなく、ヘッダーにこれらの二つのテンプレート関数定義を配置する必要があります - 実際のコードだけではなく、宣言、これらの関数を呼び出すすべてのコンパイル単位に利用できるようにする必要があります。

Test<int, int > T1; //It can not be passed 

これは、第二intはタイプ無効であるが、テンプレートはint

Test<int, 4> T2; //It can not be passed 

を期待していますが、最初に確認する必要があり、この

int x = 8; 
Test<int, x> T3 (3,4);// can not be passed 

と間違って何もありませんこれらの行のうちstatic const x = 8(つまり、xをコンパイル時定数にする)をテンプレートパラメータとして使用できるようにする

また、クラス定義の最後にはセミコロンがありません。

+0

テスト T2;違います。それはコンパイルできません... – ToBeGeek

+0

@ user1314029と何かエラーがありますか?それは、アーキテクチャx86_64のための他のエラー – je4d

+0

未定義のシンボルを固定した後、私の作品:アーキテクチャx86_64で 打ち鳴らす見つかりません記号(S):main.o LDに _main: は「テスト ::テスト()」、から参照します:エラー:リンカコマンドが終了コード1で失敗しました(呼び出しを見るために-vを使います) – ToBeGeek

関連する問題