2017-04-13 10 views
0

私はこのTSQLQueryを、TFieldsとオペレータが[]

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; 

ようになりTSQLQueryをを使用して、クエリを持っているが、かなり不格好です。私が呼び出した場合、

public: 
    TField* operator[](int Index) { return Fields[Index]; } 

しかし:実装を見て、オペレータは、[]ヘッダにオーバーロードされ

[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; 

は、私は、コンパイラのエラーを取得しますなぜ上記の呼び出しはコンパイルされないのですか?私は何かが欠けする必要があります。..

答えて

2

正しい構文がでキックするオーバーロードされたオペレータのための関与クラスオブジェクトではなく、ポインタ、存在する必要があります

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

です。

+0

を代替は単純にしています'TFields :: operator []'はまったく使用しないでください。 'int insert_id = tq-> Fields-> Fields [0] - > AsInteger;' TFields :: operator [] ' :operator [] 'は、余分な' CALL'命令を除いてあなたには何も得られません。 C++に存在する唯一の理由は、 'default'プロパティにアクセスするときにDelphiの構文に近いC++構文を提供することです。 –

関連する問題