主题:一个程序的assertion failure问题
程序如下:
头文件"matrix.h"
template<class T>
class Matrix
{
public:
Matrix(int r=0,int c=0)
{
rows=r;
cols=c;
element=new T[rows*cols];
}
//Matrix(const Matrix<T>& m); //复制构造函数
~Matrix() {delete [] element;}
int Rows() const {return rows;}
int Columns() const {return cols;}
T& operator()(int i, int j) const;
Matrix<T>& operator=(const Matrix<T>& m);
Matrix<T> operator+() const; // 一元加法
Matrix<T> operator+(const Matrix<T>& m) ;
Matrix<T> operator-() const; // 一元减法
Matrix<T> operator-(const Matrix<T>& m) const;
Matrix<T> operator*(const Matrix<T>& m) const;
Matrix<T>& operator+=(const T& x);
void setdata();
void display();
private:
int rows, cols; // 矩阵维数
T *element; // 元素数组
};
成员函数定义”matrix.cpp“
#include<iostream.h>
#include"Matrix.h"
//对()重载
template<class T>
T& Matrix<T>::operator()(int i, int j) const
{
return element[(i-1)*cols+j-1];
}
template<class T>
Matrix<T>& Matrix<T>::operator=(const Matrix<T>& m)
{
int i;
(*this).rows=m.rows;
(*this).cols=m.cols;
delete [] element;
element=new T[rows*cols];
for(i=0;i<rows*cols;i++)element[i]=m.element[i];
return (*this);
}
template<class T>
Matrix<T> Matrix<T>::operator+() const
{
}
template<class T>
Matrix<T> Matrix<T>::operator+(const Matrix<T>& m)
{
int i;
Matrix<T> w(rows,cols);
for(i=0;i<rows*cols;i++) w.element[i]=element[i]+m.element[i];
return w;
}
template<class T>
Matrix<T> Matrix<T>::operator-() const
{
int i;
Matrix<T> w(rows,cols);
for(i=0;i<rows*cols;i++)w.element[i]=-element[i];
return w;
}
template<class T>
Matrix<T> Matrix<T>::operator-(const Matrix<T>& m) const
{
int i;
Matrix<T> w(rows,cols);
for(i=0;i<rows*cols;i++)w.element[i]=element[i]-m.element[i];
return w;
}
template<class T>
Matrix<T> Matrix<T>::operator*(const Matrix<T>& m) const
{//一个矩阵的行数应等于另一个的列即cols==m.rows
int i,j,k;
T sum;
Matrix<T> w;
w.rows=rows;
w.cols=m.cols;
for(i=0;i<rows;i++)
for(j=0;j<m.cols;j++)
{
sum=0;
for(k=0;k<cols;k++)
sum+=element[i*cols+k]*m.element[k*m.cols+j];
w.element[i*w.cols+j]=sum;
}
return w;
}
template<class T>
Matrix<T>& Matrix<T>::operator+=(const T& x)
{
int i;
for(i=0;i<rows*cols;i++)element[i]=element[i]+x;
return (*this);
}
template<class T>
void Matrix<T>::setdata( )
{
int i,j;
for(i=0;i<rows;i++)
for(j=0;j<cols;j++)
cin>>element[i*cols+j];
}
template<class T>
void Matrix<T>::display()
{
int i,j;
for(i=0;i<rows;i++)
{
for(j=0;j<cols;j++)
cout<<element[i*cols+j]<<" ";
cout<<endl;
}
}
主函数"main.cpp"
#include<iostream.h>
#include"Matrix.cpp"
void main()
{
Matrix<int> m1(3,3);
Matrix<int> m2(3,3);
Matrix<int> m3(3,3);
m1.setdata();
m2.setdata();
m3= m1-m2;//[color=FF0000]出错[/color]
m3.display();
}
头文件"matrix.h"
template<class T>
class Matrix
{
public:
Matrix(int r=0,int c=0)
{
rows=r;
cols=c;
element=new T[rows*cols];
}
//Matrix(const Matrix<T>& m); //复制构造函数
~Matrix() {delete [] element;}
int Rows() const {return rows;}
int Columns() const {return cols;}
T& operator()(int i, int j) const;
Matrix<T>& operator=(const Matrix<T>& m);
Matrix<T> operator+() const; // 一元加法
Matrix<T> operator+(const Matrix<T>& m) ;
Matrix<T> operator-() const; // 一元减法
Matrix<T> operator-(const Matrix<T>& m) const;
Matrix<T> operator*(const Matrix<T>& m) const;
Matrix<T>& operator+=(const T& x);
void setdata();
void display();
private:
int rows, cols; // 矩阵维数
T *element; // 元素数组
};
成员函数定义”matrix.cpp“
#include<iostream.h>
#include"Matrix.h"
//对()重载
template<class T>
T& Matrix<T>::operator()(int i, int j) const
{
return element[(i-1)*cols+j-1];
}
template<class T>
Matrix<T>& Matrix<T>::operator=(const Matrix<T>& m)
{
int i;
(*this).rows=m.rows;
(*this).cols=m.cols;
delete [] element;
element=new T[rows*cols];
for(i=0;i<rows*cols;i++)element[i]=m.element[i];
return (*this);
}
template<class T>
Matrix<T> Matrix<T>::operator+() const
{
}
template<class T>
Matrix<T> Matrix<T>::operator+(const Matrix<T>& m)
{
int i;
Matrix<T> w(rows,cols);
for(i=0;i<rows*cols;i++) w.element[i]=element[i]+m.element[i];
return w;
}
template<class T>
Matrix<T> Matrix<T>::operator-() const
{
int i;
Matrix<T> w(rows,cols);
for(i=0;i<rows*cols;i++)w.element[i]=-element[i];
return w;
}
template<class T>
Matrix<T> Matrix<T>::operator-(const Matrix<T>& m) const
{
int i;
Matrix<T> w(rows,cols);
for(i=0;i<rows*cols;i++)w.element[i]=element[i]-m.element[i];
return w;
}
template<class T>
Matrix<T> Matrix<T>::operator*(const Matrix<T>& m) const
{//一个矩阵的行数应等于另一个的列即cols==m.rows
int i,j,k;
T sum;
Matrix<T> w;
w.rows=rows;
w.cols=m.cols;
for(i=0;i<rows;i++)
for(j=0;j<m.cols;j++)
{
sum=0;
for(k=0;k<cols;k++)
sum+=element[i*cols+k]*m.element[k*m.cols+j];
w.element[i*w.cols+j]=sum;
}
return w;
}
template<class T>
Matrix<T>& Matrix<T>::operator+=(const T& x)
{
int i;
for(i=0;i<rows*cols;i++)element[i]=element[i]+x;
return (*this);
}
template<class T>
void Matrix<T>::setdata( )
{
int i,j;
for(i=0;i<rows;i++)
for(j=0;j<cols;j++)
cin>>element[i*cols+j];
}
template<class T>
void Matrix<T>::display()
{
int i,j;
for(i=0;i<rows;i++)
{
for(j=0;j<cols;j++)
cout<<element[i*cols+j]<<" ";
cout<<endl;
}
}
主函数"main.cpp"
#include<iostream.h>
#include"Matrix.cpp"
void main()
{
Matrix<int> m1(3,3);
Matrix<int> m2(3,3);
Matrix<int> m3(3,3);
m1.setdata();
m2.setdata();
m3= m1-m2;//[color=FF0000]出错[/color]
m3.display();
}