C++类模板是模板: template argument is invalid

标签 c++ templates

我的类模板有问题。我希望类中的私有(private)数据是某种数字类型的 vector vector ,即:

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

但我想要 vector 类型(我正在使用第三方 vector 库和 STL vector ),以及要模板化的元素类型。我尝试了模板模板,但现在我认为这不能解决我的问题。一个高度简化的例子是:

#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

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

最佳答案

#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 的声明中错过了第三个 >

关于C++类模板是模板: template argument is invalid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12323929/

相关文章:

c++ - 错误 C2664 : 'HttpOpenRequestW' : cannot convert parameter 6 from 'LPTSTR [2]' to 'LPCWSTR

c++ - 如何确定我们是否在主线程中运行?

c++ - 对模板基础构造函数的调用不明确

c++ - add_lvalue_reference_t<T> 和 T& 之间的区别

c++ - 在定点类型上实现模数

c++ - 如何解决这个模板函数的二义性错误

c++ - uint8_t 类型的 sscanf 占位符是什么?

c++ - 使用函数指针的模板化双重调度

javascript - 使用预编译模板创建页面

c++ 11模板类型别名以减轻痛苦