Я хотел бы спросить вас, почему мне нужно вызывать оператор класса напрямую в этой ситуации:
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. Я также хотел бы спросить вас, в каких ситуациях мне нужно вызывать оператор класса напрямую.
Panels
видимо указатель, а при использовании []
на указателе, он обрабатывает его как указатель на массив и пытается добавить смещение к указателю, чтобы получить Panels
объект с заданным смещением, чего вы не хотите.
Вы должны разыменовать указатель, либо с Panels->operator[](1)
или же (*StatusBar->Panels)[1]
добраться до объекта и позвонить operator[]
на нем, что, вероятно, ваше желаемое поведение.
Других решений пока нет …