私はMatrixクラスをC++で実装しようとしています。代入演算子を動作させるのに問題があります。この時点で私は失われています。問題は、「ベクトル添え字が範囲外です」というエラーが表示されていることです。このコードを割り当てオーバーロード演算子からthis->size = A.size;
に移動すると、コンパイラは不平を言っていません。代入演算子は、Matrixオブジェクトへの参照を返すことになっています。私は新しいMatrixオブジェクトを作成しようとしましたが、それは私に同じエラーを与えました。何かヒント?あなたが別の行列を割り当てるときC++代入演算子のMatrixクラス
0
A
答えて
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
関連する問題
- 1. テンプレートクラスの代入演算子クラス
- 2. C++の代入演算子または増分演算子
- 3. 代入演算子
- 4. C++のデフォルトの代入演算子
- 5. Javaコンパウンド代入演算子と代入演算子
- 6. C++のオーバーロード代入演算子
- 7. C++のコピーコンストラクタ/代入演算子エラー
- 8. コピーコンストラクタのないC++代入演算子
- 9. C++および演算子[]のカスタムVectorおよびMatrixクラス
- 10. C++ライブラリのクラスのオーバーロード代入演算子
- 11. C++ BigIntegerと代入演算子オーバーロード
- 12. C++デフォルトコピーと代入演算子
- 13. テンプレート代入演算子:有効なC++?
- 14. 移動代入演算子C++
- 15. JavaScriptの代入演算子
- 16. テンプレートクラスの代入演算子
- 17. デフォルトの代入演算子
- 18. JavaScriptの代入演算子
- 19. コピーコンストラクタと代入演算子
- 20. Ruby代入演算子
- 21. Autohotkey:=と=代入演算子
- 22. ハンドルクラスと代入演算子
- 23. 代入演算子(Java)
- 24. C++クラスの演算子
- 25. C#のオーバーロード演算子==クラス
- 26. オーバーロードされたコピー代入演算子からC++のデフォルトのコピー代入演算子を呼び出す
- 27. 代入演算子を計算する
- 28. 代入演算子と平等演算子
- 29. ":"演算子は代入演算子 "="と同等ですか?
- 30. 代入演算子の代わりに配置演算子とコピーコンストラクタを使用
サイズはコピーしていますが、値はコピーしていません。疑似コピーされた行列を使用しようとしているときにインデックスエラーが発生し、ベクトル 'M'の存在しないインデックスにアクセスすることがあります。 – Gasper
あなたはC++の専門家ではないようです。なぜあなたはこれをやっている?覚えているだけでなく、行列計算が必要なアプリケーションがありますか?アプリケーションがある場合は、使用可能なライブラリの一部を使用してください。良いライブラリの1つは、armadillo http://arma.sourceforge.net/です。それはあなた自身がここでやりたいことよりも効率的です。行列操作を書くことは非常に難しいことです。あなたが達成したいことが分かっていて、それができることを知っていない限り、これをしないでください。 –
コードが機能しない場合でも、コンストラクタを直接呼び出すことはできません。 –