私は C++ で独自のテンプレート クラスを作成するのが初めてで、数時間オンラインで回答を検索し、関数とそのパラメーターをいじった後、あきらめました。次のクラスの "=" 演算子で実行時に問題が発生しました:
マトリックス.h:
template <class datatype> class Matrix{
datatype** element;
unsigned int m,n;
public:
Matrix(unsigned int M, unsigned int N,datatype x){
m=M; // # of rows
n=N; // # of cols
element=new datatype*[m];
for(int i=0;i<m;i++) element[i]=new datatype[n];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
element[i][j]=x;
}
void print(){
for(int i=0;i<m;i++){
for(int j=0;j<n;j++) cout<<element[i][j]<<" ";
cout<<"\n";
}
}
Matrix operator=(Matrix A){
for(int i=0;i<m;i++) delete[] element[i];
delete[] element;
m=A.m;
n=A.n;
element=new datatype*[m];
for(int i=0;i<m;i++) element[i]=new datatype[n];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
element[i][j]=A.element[i][j];
return *this;
}
};
これをテストすると、コンパイルとリンクはエラーなしでスムーズに実行され、完全に有効な出力が得られます。しかし、ある行列を別の行列の値に代入しようとすると、「matrix_test が動作を停止しました」というメッセージが表示されてプログラムがクラッシュします。matrix_test.cpp の私のテスト コードは次のとおりです。
Matrix<int> M(5u,3u,0);
Matrix<int> P(2u,7u,3);
int main(){
M.print();
cout<<"\n";
P.print();
cout<<"\n";
P=M;
P.print();
}
助けてくれてありがとう!