2014-03-05 65 views
1

[dcc32錯誤] MSSQLQuery.pas(29):從先前聲明的「DataEvent」不同E2037宣言編譯錯誤

我做了一些研究,發現這個問題是壓倒一切的功能過程中造成如果在超類和子類的聲明是不同的

DataEvent是庫函數和伊夫檢查庫,發現代碼中的聲明是正確的,但是我不知道爲什麼這個編譯錯誤發生

我也證實只有一個D ataEvent函數在這個類

我是新來的Delphi所以,請幫我解決這個錯誤

這是我所定義的

TMSSQLQuery = Class (TADOQuery) 
    Private 
     FAutoNoLock : Boolean; 
    Protected 
     procedure DataEvent(Event: TDataEvent; Info: Longint); override; 
    Public 
     Constructor Create (AOwner : TComponent);Override; 
     Destructor Destroy;Override; 
    End; 

這個類是過程定義

Procedure TMSSQLQuery.DataEvent(Event: TDataEvent; Info: Longint); 
Begin 
    { Call inherited method } 
    Inherited DataEvent (Event, Info); 
    If Event in [deConnectChange, dePropertyChange] 
    Then RefreshParams; 
End; 
+0

1)您確定MSSQLQuery.pas或相關文件沒有更改嗎? 2)你確定沒有其他MSSQLQuery 3)你有沒有試圖關閉delphi IDE並重新啓動? (它經常變得不穩定)。 4)你可以發佈DataEvent及其祖先的聲明的代碼。 –

+1

請[edit]包含導致編譯器錯誤的實際代碼行(第29行)。 –

+0

我已經添加了問題 – tej

回答

2

注意:您最近編輯後,這個問題是清楚的。

你已經宣佈與LongInt第二個參數的DataEvent處理程序:

procedure DataEvent(Event: TDataEvent; Info: Longint); override; 

的VCL將其定義爲NativeInt(見documentation):

procedure DataEvent(Event: TDataEvent; Info: NativeInt); override; 

NativeIntLongInt不是同樣在該聲明中,因此派生類定義不匹配,你試圖覆蓋祖先的。 (請參閱我的答案的下一部分)。

此錯誤,如果你有實現部分是從接口聲明不同的聲明發生。

type 
    TSomeClass=class(TSomething) 
    procedure DoThisThing(const AParameter: TSomeParamType); 
    end; 

implementation 

// Note difference in parameter name 
procedure TSomeClass.DoThisThing(AParam: TSomeParamType); 
begin 

end; 

// This would cause the same error - note the missing 'const' 
procedure TSomeClass.DoThisThing(AParameter: TSomeParamType); 
begin 

end; 

// This can cause the same error - note different param type 
procedure TSomeClass.DoThisThing(AParameter: TDiffParamType); 

問題的最簡單解決方案是使用類完成來爲您編寫實現定義。鍵入interface中的聲明,然後(仍在該類定義中)使用Ctrl + Shift + C。它會產生爲你實現部分的正確方法存根。

(您可以在同一時間數;使用組合鍵之前剛剛宣佈他們全部使用按Ctrl + + UPARROW(或DownArrow中文)可幫助您來回移動之間的實現和接口部分)。

的文件(見下文)表明,當您試圖重寫虛方法也會出現此錯誤消息,但壓倒一切的方法有不同的參數列表,調用約定等。此代碼是從該鏈接的文檔:

type 
    MyClass = class 
    procedure Proc(Inx: Integer); 
    function Func: Integer; 
    procedure Load(const Name: string); 
    procedure Perform(Flag: Boolean); 
    constructor Create; 
    destructor Destroy(Msg: string); override;  (*<-- Error message here*) 
    class function NewInstance: MyClass; override; (*<-- Error message here*) 
    end; 

欲瞭解更多信息,請參閱德爾福文檔E2037