C++重载operator<<输出模板矩阵类时提示模板成员函数无匹配调用
你遇到的编译错误由两个问题导致:
1. 缺少const修饰的operator()重载
你当前实现的operator()是普通非const成员函数,仅允许在非const的LU_Matrix实例上调用。但你的operator<<第二个参数是const LU_Matrix<T, N> mat,属于const限定的对象,在const对象上调用mat(i,j)时无法匹配到非const版本的运算符重载,因此抛出匹配失败错误。
解决方法:新增一个const版本的operator()重载:
template<typename T, unsigned int N> const T& LU_Matrix<T, N>::operator() (unsigned int i, unsigned int j) const { return data_[N * i + j]; }
2. 触发C++「最令人头疼的解析」规则
你main函数中的LU_Matrix<double, 3> lu_mat();不会被编译器识别为定义LU_Matrix类型对象,而是会被解析为声明一个返回值为LU_Matrix<double, 3>类型、无入参、名为lu_mat的函数。后续执行std::cout << lu_mat时实际传入的是函数指针,也会引发运算符匹配错误。
解决方法:修改对象定义写法:
// 写法1:C++03及以上通用,移除多余括号 LU_Matrix<double, 3> lu_mat; // 写法2:C++11及以上可用,用花括号初始化避免歧义 LU_Matrix<double, 3> lu_mat{};
内容的提问来源于stack exchange,提问作者Lucas Myers
相关产品推荐
相关产品推荐

