2015-12-30 2 views
2

Я пытаюсь создать расширенный класс из TADOQuery ниже, как.Как расширить класс от TADOQuery в C++ Builder?

Я добавил новый блок для проекта.

Unit2.h

#include <ADODB.hpp> 

#ifndef Unit2H 
#define Unit2H 
#endif 


class TExTADOQuery : public TADOQuery 
{ 
    typedef TADOQuery inherited; 
    public: 
    __fastcall virtual TExTADOQuery(Classes::TComponent* AOwner); 
    __fastcall virtual ~TExTADOQuery(void); 
} 

Unit2.cpp

#pragma hdrstop 

#include "Unit2.h" 

#pragma package(smart_init) 

, когда я компиляции получаю это сообщение об ошибке.

[C++ Error] Unit2.cpp (12): E2040 Декларация завершается неправильно

ADODB.hpp

class DELPHICLASS TADOQuery; 
class PASCALIMPLEMENTATION TADOQuery : public TCustomADODataSet 
{ 
    typedef TCustomADODataSet inherited; 

private: 
    Classes::TStrings* FSQL; 
    int FRowsAffected; 
    Classes::TStrings* __fastcall GetSQL(void); 
    void __fastcall SetSQL(const Classes::TStrings* Value); 

protected: 
    void __fastcall QueryChanged(System::TObject* Sender); 

public: 
    __fastcall virtual TADOQuery(Classes::TComponent* AOwner); 
    __fastcall virtual ~TADOQuery(void); 
    int __fastcall ExecSQL(void); 
    __property int RowsAffected = {read=FRowsAffected, nodefault}; 

__published: 
    __property CommandTimeout = {default=30}; 
    __property DataSource ; 
    __property EnableBCD = {default=1}; 
    __property ParamCheck = {default=1}; 
    __property Parameters ; 
    __property Prepared = {default=0}; 
    __property Classes::TStrings* SQL = {read=GetSQL, write=SetSQL}; 
}; 

Я не undertand, что PASCALIMPLEMENTATION.

Как я могу заявить правильно?

ответ

1

Я забыл точку с запятой.

class TExTADOQuery : public TADOQuery 
{ 
    typedef TADOQuery inherited; 
    public: 
    __fastcall virtual TExTADOQuery(Classes::TComponent* AOwner); 
    __fastcall virtual ~TExTADOQuery(void); 
}; 
+1

Это всегда происходит из-за запятой – Fatih

+1

Кроме того, '# endif' находится не в том месте. Он должен быть в конце файла после объявления класса (иначе защита заголовка не имеет смысла). Кроме того, '#include ' должен находиться внутри блока '#ifndef ... # endif'. Все в заголовке должно находиться внутри охранника. Вся точка защиты заголовка - это то, что все игнорируется при последующих включениях после того, как заголовок уже был включен один раз, иначе вы получите ошибки «множественного объявления» и т. Д. –

Смежные вопросы