TSQLQuery、TFields 和运算符 []
TSQLQuery, TFields and operator []
我有一个查询,使用 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[] 在 header:
中重载
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;
必须有一个 class 对象,而不是指针,重载运算符才能启动。
我有一个查询,使用 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[] 在 header:
中重载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;
必须有一个 class 对象,而不是指针,重载运算符才能启动。