【问题标题】:C++ class template is a template: template argument is invalidC++ 类模板是模板:模板参数无效
【发布时间】:2012-09-07 19:00:13
【问题描述】:

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

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

为什么会出现此错误?有没有人有建议的修复? 谢谢!

【问题讨论】:

  • 计算无效的行中的&lt;s 和&gt;s。少了一个……
  • 这是一个非常糟糕的错误信息,完全具有误导性。
  • @PeteBecker:耻辱。我正准备挖掘我的template rebinder。

标签: c++ templates


【解决方案1】:
#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 的声明中错过了第三个&gt;。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 2014-03-14
    • 2011-05-10
    • 1970-01-01
    • 2020-07-09
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多