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;
} 展开
错误 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;
} 展开
展开全部
你这叫类的成员函数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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询