2016-11-26 16 views
-3

C++で[]演算子をどのようにオーバーロードできますか。私は基本的に1次元配列のインデックスにアクセスしてそれを返す必要があります。私はこれをやってみましたが、望みの結果が得られないようです。[]演算子をどのようにオーバーロードできますか?

Square Square::operator [](const Square& temp) 
{ 
    Square obj; //creates a Square class object. 

    for(int i=0;i<dimension;i++) 
    { 
     *obj.board = temp.board[i]; 

    } 
return obj; 

} 
+2

新しいオブジェクトを返すコピー演算子として[]を使用しているようです。あなたが望むのは、インデックスを取得するものです。私は、this.board [i]を返します。このボードが存在すると仮定します。 – kabanus

+2

すべての警告とデバッグ情報( 'g ++ -Wall -g')でコンパイルし、**デバッガ**(' gdb')を使用します。あなたはバグが他の場所にあるかもしれません( 'temp'を持っていて、それは' Square'が奇妙に見えます) –

+0

'Square'にアクセスしたい配列が含まれている場合、基本的には通常の配列の場合は 'operator []'です。つまり、インデックスを取得し、実際の配列の要素型への参照を返し、配列の 'operator []'を内部的に使用する必要があります。 –

答えて

1

あなたは、あなたの添字の過負荷がassert

PSにこの

Square& Square::operator[] (const int index) 
{ 
    // checks if index is >= to zero AND less than your array size 
    assert(index >= 0 && index < yourArray.size()); 
    return yourArray[index]; 
} 

詳細情報のようになりますあなたのSquareクラスの種類の配列を持っていることを確認してください:これは下に動作しますあなたがSquareの配列を作成すると仮定します。そうでなければ、それぞれメソッドシグネチャを更新します。

+1

詳細については、assertの動作と、おそらく評判の良いドキュメントページへのリンクの簡単な説明をお勧めします。 – user4581301

関連する問題