1

この状況でクラス演算子を直接呼び出す必要があるのはなぜですか。

void __fastcall TForm2::statusDrawPanel(TStatusBar *StatusBar, TStatusPanel *Panel,
                                        const TRect &Rect)
{
  //if (Panel == StatusBar->Panels[1]) This doesn't work for me, compiler throws E2096 Illegal structure operation
    if (Panel == StatusBar->Panels->operator [](1)) // but this is working
    {
      int i  = 0;
    }
}

BorlandのC++BuilderXE2を使用しています。また、どのような状況でクラス演算子を直接呼び出す必要があるのか​​をお聞きしたいと思います。

4

1 に答える 1

3

Panelsは明らかにポインタであり、ポインタで使用すると[]、それを配列へのポインタのように扱い、ポインタにオフセットを追加してPanels、指定されたオフセットでオブジェクトを取得しようとします。これは望ましくありません。

Panels->operator[](1)オブジェクトを使用して、または(*StatusBar->Panels)[1]オブジェクトに到達してオブジェクトを呼び出すために、ポインタを逆参照する必要がありoperator[]ます。これは、おそらく望ましい動作です。

于 2012-11-04T22:39:16.560 に答える