2011-12-22 18 views
0

私は、テンプレートを理解してからコンテナを提供するテンプレートクラスのオブジェクトを作成する単純なテンプレートクラスを作成しようとしています。正確にint型またはcharのように処理が、それはいつも言って私にエラーを与えるべきである。コンテナがクラステンプレートのテンプレート引数として渡される

"template argument 1 is invalid" 

は、ここで私はこのエラーが発生した行されます。

templateTest<(std::list<int>)> testingTheTemplate; 

はここでテンプレートのスケルトンで、クラス

template <class testType> class templateTest 
{ 
    /* use some iterators and print test data here */ 
}; 

私はここで何が欠けていますか?

+0

で03
またはtemplateTest<std::list<int>> testingTheTemplate;
templateTest<std::list<int> > testingTheTemplate;する必要があります。 – angryInsomniac

+0

あなたの場所を忘れていませんでした。クラス定義の後に(コロン)? 2番目のコードスニペットの最後にあるのですか? – Yola

答えて

3

あなたは、クラス定義の後にセミコロンを忘れていました:

template <class testType> class templateTest 
{ 

}; // <- semicolon 

をまた、このようあなたのインスタンス化を宣言します。

templateTest<std::list<int> > testingTheTemplate; 
         // ^^^ required space (C++03) 

ない括弧との間のスペースに注意してください。

C++ 11より前のバージョンでは、<<>>は演算子として扱われます。このような場合は、それらを分離する必要があります。

+0

これは新しいものです。私は空白がC++で決して変化しないという印象を受けました。(フーバーになるようなトークンの中で使われていない限り) 助けてくれてありがとう! – angryInsomniac

+0

これはこの場合に行います。 >>と<<はビットシフトとして扱われます。 (私が考えるC++ 11は例外です)。 –

+0

Nitpick:これは特殊化ではなく、インスタンス化です。 –

1

それはちょうどそれは私がやろうとしていたものではないですが、テンプレートの種類として「INT」でテンプレートを作成しますC++ C++ 11

+0

templateTest > これは私が最初に与えたものですが、「>>」演算子から取得する方が優先順位が高いようです。 – angryInsomniac

+0

@angryInsomniac:そのため、彼は古いC++ 03バージョン(その問題を抱えている)と新しいC++ 11バージョン(すべてのコンパイラでサポートされていないか、特殊なコンパイラフラグが必要です) – KillianDS

+0

@angryInsomniacコンパイラは現在のC++標準(C++ 11)をサポートしていません – Abyx

関連する問題