2011-06-24 17 views
7

私はテンプレートの初心者ですので、素朴な疑問をお許しください。私は、このコードのエラーを取得しています:「クラステンプレートの使用にはテンプレート引数リストが必要」とはどういう意味ですか?

template <class t> 
class a{ 
public: 
    int i; 
    a(t& ii):i(ii){} 
}; 


int main() 
{ 
    a *a1(new a(3)); 
    cout<<a1.i; 

    _getch(); 
} 

はエラーをコンパイルします。

  1. 'a' : use of class template requires template argument list
  2. 'a' : class has no constructors
+10

a<int> *a1(new a<int>(3)); 

ます。また、書くことができますがあなた、Mr.Downvoterは、あなたのプロの生活の中でこの段階を過ぎたことはないと思っています。これはあなたにとって明白ではないものです。 –

+3

ありがとうたくさんの男!あなたはSOをすばらしい場所にしています...穏やかなことなしに素朴な質問に答える:))) –

+0

@Armen:公正であるために、私たちは存在するC++の本が答えるという質問について話しています。 –

答えて

6
a(t& ii):i(ii){} 

a(const t& ii):i(ii){} 

あなたはコンストラクタへのconstリテラル、および一時を渡すことができるように、NTテンプレートパラメータが自動的に推測されるように、あなたはヘルパー関数を使用することができます。その後、

そして、これを実行します。私はドン...素朴な何かが求められているという理由だけで、それは質問をdownvoteする素敵だとは思わない

a<int> a2(3); 
+1

thnk uそんなに!! –

+0

テンプレートに間違ったタイプがあります。 'a * a1(new a (3));' Foo barがintに変換可能であることを確認してください。 –

+1

@Martin:なぜですか? :/ – Nawaz

10

使用

a<int> *a1(new a<int>(3)); 
^^^^^   ^^^^ 

をあなたWA場合これがあるべき

template<class T> 
a<T> * createA (const T& arg) //please add const to your ctor, too. 
{ 
    return new a<T>(arg) 
} 
+0

私は謙虚にdownvoteが何だったのか尋ねることができますか?セミコロンのために私は忘れましたか? –

関連する問題