2011-10-19 11 views
0

皆:ポインタを使ったC++動的2D配列

Matrixを作成し、学校のコースでさまざまな操作を実行できるプログラムを作成しています。彼らは適切なマトリックス操作でオペレータを過負荷にする必要があります。

私は次の関数で苦労しています:

typedef double matrixType; 


using namespace std; 


class Matrix{ 
protected: 
    int m,n; // m:row size n:column size 
    matrixType **a; //Allows us to acces the a(ij) i,j position of the matrix 


//================================================== 
// (==Operator)Verifies if two given Matrices are equal 
//================================================== 

bool Matrix::operator==(const Matrix &B){ 

bool flag=false; 


if(B.m ==m && B.n ==n){ 

    for (int row=0; row<m; row++) { 
     for (int col=0; col<n; col++) { 
      if (B[row][col] != a[row][col]) { 
       flag=false; 
      } 
     } 
    } 
    flag= true; 
} 

else{ 
    flag=false; 

} 

return flag; 


} 

Xcodeのは、次の行であることを私に警告します:

if (B[row][col] != a[row][col]) 

型「constのマトリックス」添字演算子を提供していません。

注:このコード部分では、機能ヘッダー、コンストラクターおよびその他の機能が省略されています。

ご協力いただければ幸いです。 ありがとうございます。あなたの実装を考えると

答えて

5

、それはところでif (B.a[row][col] != a[row][col])

する必要があります:あなたがあなた自身の行列クラスを実装することを計画している場合は、this pageをお読みください。あなたがする何を意味するのか

+0

おそらく_also_添字演算子を与える必要があります。 –

+0

ヘルプとリソースをありがとう、ありがとう、それを読んでください。 – edu222

1

if (B.a[row][col] != a[row][col]) { 
       flag=false; 
} 

だったそして、あなたはそれを思考の瞬間を与えた場合、あなたは単に

if (B.a[row][col] != a[row][col]) { 
       return false; 
} 

を行うと、フラグ変数altogeherをスキップすることができませんでしたか?はいの場合、なぜそうでないのか、なぜそうではないのですか(あなたにボーナスポイントを与えます)。

あなたは本当にB [] []で、あなたのクラスに[]演算子を実装しなければならないしたい場合:

matrixType* operator[](size_t index) 
{ 
    return a[index]; 
} 
+0

こんにちは、ありがとうございました! – edu222

+0

私はフラグを使用していた理由は、私はIF構造内にリターンステートメントを持つだけで心配していたからです。私は旗なしでそれをやろうとしました。私のIDEから警告がありました: '制御は非空白関数の終わりに達するかもしれません' – edu222

+0

@ edu222もう一度return文を最後に置くべきです。 Bm!= m && B.n!= nの場合はfalseを返します。もしifが失敗した場合はfalseを返します(早期呼び出しとも呼ばれ、10^10x10^10行列とすべての不要な比較を想像してください)。インデックス0,0で異なります); 3.メソッドの最後にtrueを返します。 –

1

boost::ublas::matrixboost::gil::view_typeOpenCV::Matなどからヒントを取り、インデックスのoperator(int,int)を使用添字演算子の代わりに使用します。実装、保守、デバッグが容易になります。

+0

こんにちは、提案してくれてありがとう、私は時間があるようにすぐにそれをチェックします。今のところ私はそれがほとんど準備ができているので、私の宿題は現在の実装で終わります。 – edu222