У меня есть запрос, используя TSQLQuery, который выглядит так
TSQLQuery* tq = new TSQLQuery(NULL);
tq->SQLConnection = atdbDM->SQLConnection1;
tq->SQL->Add("SELECT LAST_INSERT_ID();");
tq->Open();
int insert_id = tq->Fields->operator [](0)->AsInteger;
Выражение
int insert_id = tq->Fields->operator [](0)->AsInteger;
довольно неуклюжий Если посмотреть на реализацию, оператор [] перегружен в заголовке:
public:
TField* operator[](int Index) { return Fields[Index]; }
Однако, если я позвоню:
int insert_id = tq->Fields[0]->AsInteger;
Я получаю ошибку компилятора:
[bcc32 Error] TRegisterFreshCSBatchForm.cpp(97): E2288 Pointer to structure
required on left side of -> or ->*
TRegisterFreshCSBatchForm::mRegisterBtnClick(TObject *)
Любые идеи, почему вышеупомянутый вызов не компилируется? Я должно быть что-то упустил ..
Правильный синтаксис
int insert_id = (*tq->Fields)[0]->AsInteger;
Для включения перегруженного оператора должен быть объект класса, а не указатель.
Других решений пока нет …