C++新手类模板函数定义问题

想写一个矩阵数乘的友元函数,结果报错如下:错误3errorC2244:“mat<T>::operator*”:无法将函数定义与现有的声明匹配g:\graduatedstu... 想写一个矩阵数乘的友元函数,结果报错如下:
错误 3 error C2244: “mat<T>::operator *”: 无法将函数定义与现有的声明匹配 g:\graduated study\研究生课程\c++与数据结构\上课用文件\作业\第四次作业\hw4\hw4.cpp 291 1 hw4
------------------以下主要摘录数乘部分代码,其他部分可通过编译--------------
class mat{
private:
int row;
int column;
T** pt;

public:
mat(int m_row, int m_column);
mat();
~mat();
void show()const;
mat(const mat& A);//拷贝构造
void ones();
void zeros();
mat operator+(const mat& B) const;
mat operator-(const mat& B) const;
mat& operator=(const mat& B);
mat operator*(const double a) const;
mat operator*(const mat& A) const;
friend mat operator*(const double a, mat& A);
};
//矩阵数乘A*3,这个函数可以正常运行!!!
template <class T>
mat<T> mat<T>::operator*(const double a)const{
mat B = (*this);//创建一个临时变量B,这样在计算过程中不会改变对象矩阵的值
for (int i = 0; i < row; i++){
for (int j = 0; j < column; j++){
(B.pt)[i][j] = (B.pt)[i][j] * a;
}
}
return B;
}

//矩阵数乘3*A,此处发生报错,如果将下面这个函数注释则可以正常运行!!
template <class T>
mat<T> mat<T>::operator*(const double a, mat<T>& A){
return A*a;
}
展开
 我来答
GTA小鸡
高粉答主

2018-12-17 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部

你这叫类的成员函数mat<T>::operator*(const double, mat<T>&),而类的声明中并没有这样一个函数,所以报错。

把这个函数改成友元函数形式:

class mat
{
private:
    ...
public:
    ...
    template<class E>
    friend mat<E> operator*(const double a, mat<E>& A);
};
template <class T>
mat<T> operator*(const double a, mat<T>& A){
    return A*a;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式