1

私が取り組んでいるプロジェクトでは、テンプレート クラスへのポインタを持つベクトルを作成しようとしています。

 template <typename T>
 std::vector<templateClass<T>*> vec;

ただし、これにより2つのエラーが発生します。

Error C2133: vec : unknown size
Error C2998: std::vector<templateClass<T>*> vec : cannot be a template definition

コードを次のように変更すると:

std::vector<templateClass<int>*> vec;

それは問題なく動作するので、問題はベクトルでテンプレート クラスを使用できないことではなく、使用する型をコンパイラに伝える必要があることだと思います。これを回避する方法はありますか?

4

4 に答える 4

2

クラス インスタンスを作成するときは、タイプを選択する必要があります。定義では T を記述できますが、インスタンスを作成する時点でタイプを指定する必要があります。

したがって、インスタンスを作成せずに定義する場合は、 を使用しますtypedef

于 2012-04-06T09:07:35.677 に答える
1

vec<T>より長いテンプレート化された式へのショートカットとして新しい型を定義しようとしているようです。通常、これは で行われますがtypedef、C++ はテンプレート化された typedef をサポートしていません。

現在のコードでは、基本的に と呼ばれる変数を定義しようとしてvecいますが、 T に特定の型を与えていないため、コンパイラが不平を言っていることに注意してください。

于 2012-04-06T09:17:34.930 に答える