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

前端之家收集整理的这篇文章主要介绍了c – 无法从另一个模板类调用模板类的模板成员函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
尝试从另一个模板类中访问模板类的模板成员函数时,我遇到编译器错误.对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<

原文链接:https://www.f2er.com/c/116400.html

猜你在找的C&C++相关文章