1

私は 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();        
}

助けてくれてありがとう!

4

1 に答える 1