Вызов оператора класса напрямую

Я хотел бы спросить вас, почему мне нужно вызывать оператор класса напрямую в этой ситуации:

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++ Builder XE2. Я также хотел бы спросить вас, в каких ситуациях мне нужно вызывать оператор класса напрямую.

1 ответ

Решение

Panels видимо указатель, а при использовании [] на указателе, он обрабатывает его как указатель на массив и пытается добавить смещение к указателю, чтобы получить Panels объект с заданным смещением, чего вы не хотите.

Вы должны разыменовать указатель, либо с Panels->operator[](1) или же (*StatusBar->Panels)[1] добраться до объекта и позвонить operator[] на нем, что, вероятно, ваше желаемое поведение.

Другие вопросы по тегам