问题 C ++类模板是一个模板:模板参数无效


我有一个类模板的问题。我希望类中的私有数据是某种数字类型的向量的向量,即:

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;
}

如图所示它编译得很好,但如果我取消注释main中的第二行,我得到错误(g ++ 4.6):

error: template argument 1 is invalid

为什么我会收到此错误?有没有人有建议的修复? 谢谢!


1358
2017-09-07 19:00


起源

伯爵 <s和 >在不行的行中。有一个失踪...... - Pete Becker
这是一个非常糟糕的错误消息,完全是误导性的。 - Carey Gregory
@PeteBecker:很遗憾。我正准备挖掘我的 模板重新绑定。 - Kerrek SB


答案:


#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;
}

效果很好。你错过了第三名 > 在宣言中 doesnt_work


16
2017-09-07 19:03



谢谢!现在我觉得真的很蠢! - jtravs