TSQLQuery,TFields和operator []

时间:2017-04-13 21:58:48

标签: c++ c++builder vcl dbexpress

我有一个查询,使用类似这样的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;

非常笨重。查看实现,operator []在标题中重载:

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 *)

为什么上述电话不能编译?我一定错过了什么..

1 个答案:

答案 0 :(得分:2)

正确的语法是

int insert_id = (*tq->Fields)[0]->AsInteger;

必须有一个类对象,而不是指针,以供重载操作符启动。