• 締切済み

クラスの合成ができない

大学で数値計算をしており、Matrixクラスを作ったのですが他のクラスや構造体のメンバ変数に取り入れようとしてもできません。 以下のようなコードなのですがどうしてできないのでしょう? #include<iostream> using namespace std; class Matrix{ private: double **ptr; int Row,Col; public: Matrix(int i=1, int j=1);/* コンストラクタ */ Matrix(const Matrix &);/* コピーコンストラクタ */ ~Matrix();/* デストラクタ */ }; Matrix::Matrix(int Dim1,int Dim2) { Row=Dim1; Col=Dim2; for(int i=0;i<=Dim1;i++){ ptr[i]=(double*) new double[Dim2+1]; if(ptr[i]==NULL){ cerr<<"Memory Allocation Error.\n"; abort(); } } } Matrix::~Matrix() { for(int i=1;i<=Row;i++)delete [] ptr[i]; delete [] ptr; ptr=NULL; } struct Test{ Matrix A(3,3);//これはエラー }; int main() { Matrix B(3,3);//これは出来た return 0; }

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

エラーになる原因は #1氏の通りですが Matrixのptrの初期化がうまくされていないように思います コンストラクタ内で ptr[i]=(double*) new double[Dim2+1]; と記述されていますが ptr[n]は確保されていません デストラクタ内の delete[] ptr; 後始末していますが 確保していませんのでおかしなことになるように思います

回答No.1

> なのですがどうしてできないのでしょう? struct Test の宣言時はMatrixをコンストラクトできないから。 コンストラクトできるのはTestのコンストラクト時(以降)。なので: struct Test {  Matrix A;  Test() : A(3,3) {} // ここでAを作る。 }