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

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

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[] на нем, что, вероятно, ваше желаемое поведение.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector