0

私のプログラムには、グリッド クラス (例: myGrid) があり、operator(). 私の問題は、セルへの参照を返すこれを呼び出すたびにmyGrid(x, y)、セル参照を要求する必要があることです。

 cell& myCell = myGrid(x,y);
 myCell.status = currentStatus; 

これを行うとエラーが発生しました:

(myGrid(x,y)).status = currentStatus;

cell で定義された関数を頻繁に使用する必要があります。したがって、私のコードを不自然に見せるセル参照を要求する必要があるたびに。問題を解決するエレガントな方法はありますか? どうもありがとう。乾杯!

ごめん。タイプミスがあります。status がセル内の public 変数であり、 currentStatus が status と同じ型の変数であると仮定しましょう。

Grid は定義済みのクラスであり、それを変更する権限がありません。セルへの参照を返します。例 cell& operator()(int x, int y)

混乱して申し訳ありません。myGrid(x,y).status は動作します。以前、どこかでミスをしました。準拠したところ、この行でエラーが発生しました。どうもありがとう!

4

2 に答える 2

0

function-myGrid(x,y) のオブジェクトが戻ります。おそらく範囲外です。つまり、返されるオブジェクトはローカル変数である可能性があります。

于 2012-05-05T13:10:33.100 に答える
0

operator()(署名)をどのように定義しましたか? の署名はstatus何ですか? それらは と である必要がcell& operator() (int x, int y);ありint& status();ます。機能しない最小限の例を提供します。

そして、最良のエレガントな方法は、明示的なメソッドを使用することです。

myGrid.GetCell(x, y).SetStatus(s);

これははるかに読みやすく、サポート可能です。また、参照を返す代わりにゲッター/セッターを使用すると、値が変更されたポイントを制御できる場合があります。そこにログを記録したり、ブレークポイントを設定したりできます。参照を返すことはお粗末な方法です。参照が変更されるか、後でのみ読み取られるかを確信できない場合があります。

于 2012-05-05T13:11:14.727 に答える