2017-12-20 7 views
0

私はC++を学び、単純なMatrixクラスを構築しようとしています。単純なMatrixクラス、エラー:プライベートコンストラクタを呼び出す

class Matrix { 
    int r; // number of rows 
    int c; // number of columns 
    double* d; // array of doubles to hold matrix values 
    Matrix(int nrows, int ncols, double ini = 0.0); 
    ~Matrix(); 
} 

コンストラクタ/デストラクタは次のとおりです:

Matrix::Matrix(int nrows, int ncols, double ini) { 
    r = nrows; 
    c = ncols; 
    d = new double[nrows*ncols]; 
    for (int i = 0; i < nrows*ncols; i++) d[i] = ini; 
} 
Matrix::~Matrix() { 
    delete[] d; 
} 

問題:私はMatrix my_matrix(2,3)を呼び出すことにより、クラスのマトリックスをインスタンス化するとき、私は次のことを得るように私が持っている基本的なケースは、Matrixクラスを定義しますエラー:error: calling a private constructor of class 'Matrix'error: variable of type 'Matrix' has private destructor

質問:なぜこれが起こっていますか?何が失敗しているのか理解するにはどうすればいいですか?誰かが私にこの問題を理解させるのに役立つ解決策/読書資料を指摘することができますか?助けてくれてありがとう!

+2

あなたが代わりに 'のstdのポインタを使用することにより、より痛みのためになります::ベクトル D;' – PaulMcKenzie

+0

@PaulMcKenzie私はC++の本以下と金融てる(でSchlogl)、古いかもしれません。それを指摘してくれてありがとう! –

+0

古くなっているのか、旧式の教授様式を使用しているのか分かりません。 'Matrix'オブジェクトのコピー、返却、または渡しを目的としているのであれば、Matrixクラスにはこれで十分ではありません。 3/5/0のルールを読んでください。 – PaulMcKenzie

答えて

2

デフォルトでは、クラスのプロパティ/メソッドへのアクセスはプライベートです。あなたのクラスでpublic:ステートメントを追加します。

class Matrix { 
    int r; // number of rows 
    int c; // number of columns 
    double* d; // array of doubles to hold matrix values 
public:  
    Matrix(int nrows, int ncols, double ini = 0.0); 
    ~Matrix(); 
} 
関連する問題