2016-10-25 7 views
0

私はMatrixクラスをC++で実装しようとしています。代入演算子を動作させるのに問題があります。この時点で私は失われています。問題は、「ベクトル添え字が範囲外です」というエラーが表示されていることです。このコードを割り当てオーバーロード演算子からthis->size = A.size;に移動すると、コンパイラは不平を言っていません。代入演算子は、Matrixオブジェクトへの参照を返すことになっています。私は新しいMatrixオブジェクトを作成しようとしましたが、それは私に同じエラーを与えました。何かヒント?あなたが別の行列を割り当てるときC++代入演算子のMatrixクラス

+0

サイズはコピーしていますが、値はコピーしていません。疑似コピーされた行列を使用しようとしているときにインデックスエラーが発生し、ベクトル 'M'の存在しないインデックスにアクセスすることがあります。 – Gasper

+1

あなたはC++の専門家ではないようです。なぜあなたはこれをやっている?覚えているだけでなく、行列計算が必要なアプリケーションがありますか?アプリケーションがある場合は、使用可能なライブラリの一部を使用してください。良いライブラリの1つは、armadillo http://arma.sourceforge.net/です。それはあなた自身がここでやりたいことよりも効率的です。行列操作を書くことは非常に難しいことです。あなたが達成したいことが分かっていて、それができることを知っていない限り、これをしないでください。 –

+0

コードが機能しない場合でも、コンストラクタを直接呼び出すことはできません。 –

答えて

2
**Matrix.hpp** 

class Matrix 
{ 
private: 
    int size;   //size of matrix 
    double value; 
    std::vector<double> M; 
public: 
... 
} 

**Header.cpp** 

Matrix& Matrix::operator=(const Matrix& A) 
{ 
    if (this == &A) 
    { 
     return *this; 
    } 
    else 
    { 
     this->size = A.size; // this is causing problems 
     return *this; 
    } 
} 

は、サイズ・データ・メンバを変更する必要があるだけでなく、このような倍のベクトルをサイズ変更などの他のデータメンバを変更する必要がないだけ。

+0

ありがとう、私はそれを逃した、私は今それを修正しました:) – DoubleOseven

関連する問題