2012-06-26 95 views
0

我需要一點幫助;我正在幫助一位朋友移植一個Delphi應用程序,這個應用程序可以在Windows的新版本中使用,因爲它目前只能在Windows 95上運行。delphi E2003未聲明標識符'self'

該代碼利用來自Woll2Woll的第三方庫進行數據庫操作。

其中一個庫生成錯誤E2003 Undeclared標識符:'self'。我已經通過谷歌和我有限的Delphi知識(來自我12年前的Pascal培訓,並推斷我輕微生鏽的PHP,BASH,ColdFusion和ASP編碼技能),經歷了許多網站,我遇到了一堵磚牆 - 我時間緊張,無法理解我在網上遇到的信息。

有問題的代碼段是從wwwQuery.pas文件和看起來像這樣:

{$ifdef wwDelphi3Up} 
    procedure TwwQuery.OpenCursor(InfoQuery: Boolean); 
    {$else} 
    procedure TwwQuery.OpenCursor; 
    {$endif} 
    begin 
     {$ifdef wwDelphi3Up} 
     inherited OpenCursor(InfoQuery); 
     {$else} 
     inherited OpenCursor; 
     {$endif} 
     //Modded by Arie 
     //wwSaveAnswerTable(self, Handle, FAnswerTable); 
     wwSaveAnswerTable(self, Handle, 'FAnswerTable'); 
    end; 

精確錯誤信息是:

[DCC Error] wwQuery.pas(243): E2003 Undeclared identifier: 'self' 
[DCC Error] wwQuery.pas(244): E2029 '.' expected but ';' found 
[DCC Fatal Error] wwcommon.pas(285): F2063 Could not compile used unit 'wwQuery.pas' 

243行是第二最後一行的正上方結束;

的wwSaveAnswerTable功能如下:

Function wwSaveAnswerTable(ADataSet: TDBDataSet; AHandle: HDbiCur; tableName: string): boolean; 

我必須改變自身的參數,停止編譯錯誤?

謝謝了。

+3

這不是你真正的代碼。如果您需要幫助,請勿發佈虛假代碼。 –

+0

我同意戴維。在任何情況下,'begin'都會打開一個新塊,因此編譯器絕不會期望'end'是文件中的最後一個 - 因爲這需要所有塊已經被關閉。 – Chris

回答

2

問題是關於編譯器定義wwDelphi3Up或任何相關的代碼。

正如你看到下一個錯誤消息:[DCC Error] wwQuery.pas(244):E2029'。'預期但'''發現

編譯器期望程序結束,並行wwSaveAnswerTable(self,Handle,'FAnswerTable');不在OpenCursor方法中編譯。這就是爲什麼自我沒有定義。

您不需要更改參數,因爲肯定會影響功能。

嘗試編譯它沒有定義,如果你沒有使用一個古老版本的Delphi:

procedure TwwQuery.OpenCursor(InfoQuery: Boolean); 
begin 
    inherited OpenCursor(InfoQuery); 
    wwSaveAnswerTable(self, Handle, 'FAnswerTable'); // Here prob FAnswerTable without quotes 
end; 
+0

嗨Marcodor,它會導致大約6多個編譯錯誤,如果我更新您的建議的代碼。 –

+0

問題出在你的代碼中。我看到你引用了FAnswerTable,它表明,即使在類定義中也有一些錯誤。 – Marcodor

+0

Hi Marcodor,我已經將第三方庫更新到最新版本,並且錯誤已得到修復。感謝您的幫助,它幫助證明代碼必須從源代碼更新。 –