14

クラス テンプレートに問題があります。クラスのプライベートデータを、ある種の数値型のベクトルのベクトルにしたい、つまり:

std::vector<std::vector<double> >
std::vector<std::vector<std::complex<double> > >

しかし、私はベクトルのタイプ (stl ベクトルと一緒にサードパーティのベクトルのライブラリを使用しています) と、要素のタイプをテンプレート化する必要があります。テンプレート テンプレートを試してみましたが、それが問題の解決策であるとは思いません。非常に単純化された例は次のとおりです。

#include <complex>
#include <vector>
template<typename T>
class Fred {
    std::vector<T> data_;
};
int main(){
    Fred<std::vector<double> > works;
    //Fred<std::vector<std::complex<double> > doesnt_work;
    return 0;
}

示されているように、正常にコンパイルされますが、メインの 2 行目のコメントを外すと、エラーが発生します (g++ 4.6):

error: template argument 1 is invalid

なぜこのエラーが発生するのですか? そして、誰かが提案された修正を持っていますか? ありがとう!

4

1 に答える 1

20
#include <complex>
#include <vector>
template<typename T>
class Fred {
    std::vector<T> data_;
};

int main(){
    //Fred<std::vector<double> > works;
    Fred<std::vector<std::complex<double> > > doesnt_work;
    return 0;
}

うまくいきます。>の宣言で3 番目を逃しましたdoesnt_work

于 2012-09-07T19:03:59.523 に答える