c – 无法从另一个模板类调用模板类的模板成员函数

c – 无法从另一个模板类调用模板类的模板成员函数,第1张

概述尝试从另一个模板类中访问模板类的模板成员函数时,我遇到编译器错误.对getSubmatrix的函数调用导致编译器警告“表达式结果未使用”,关于参数(0,0),最终失败并出现编译器错误“必须调用对非静态成员函数的引用”. 矩阵类: template <std::size_t m, std::size_t n, typename T, std::size_t rowPadding = 0>class 尝试从另一个模板类中访问模板类的模板成员函数时,我遇到编译器错误.对getSubmatrix的函数调用导致编译器警告“表达式结果未使用”,关于参数(0,0),最终失败并出现编译器错误“必须调用对非静态成员函数的引用”.

矩阵类:

template <std::size_t m,std::size_t n,typename T,std::size_t rowpadding = 0>class Matrix{public:    ...    template <std::size_t p,std::size_t q>    Matrix<p,q,T,n - q>& getSubmatrix(std::size_t column,std::size_t row)    {        ...    }};

变换类:

template <typename T>class transform{public:    ...    Matrix<4,4,T> matrix() const    {        ...        Matrix<4,T> result;        result.getSubmatrix<3,3>(0,0) = Matrix<3,3,T>();        ...    }};

请注意,将矩阵类型更改为Matrix< 4,float>而不是Matrix< 4,T>将导致有效的编译.编译器是clang 4.0,语言版本是C 11.

解决方法 你应该添加关键字模板:
result.template getSubmatrix<3,T>();//     ^^^^^^^^

没有它,编译器会认为<是一个比较运算符. PS.在这种情况下,g产生一个更容易理解的错误:

error: invalID operands of types <unresolved overloaded function type> and int to binary operator<

总结

以上是内存溢出为你收集整理的c – 无法从另一个模板类调用模板类的模板成员函数全部内容,希望文章能够帮你解决c – 无法从另一个模板类调用模板类的模板成员函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1235114.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存