delphi E2003未声明标识符'self'

时间:2012-06-26 12:58:41

标签: delphi identifier self

我需要一些帮助;我正在帮助朋友移植几年前建立在新版本Windows上的Delphi应用程序,因为它目前只在Windows 95上运行。

该代码使用Woll2Woll的第三方库进行数据库操作。

其中一个库生成错误E2003 Undeclared标识符:'self'。

我通过Google浏览了很多网站,并且我对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;

我必须将Self参数更改为什么才能停止编译错误?

感谢筹码。

1 个答案:

答案 0 :(得分:2)

问题与编译器定义wwDelphi3Up或代码中的任何相关内容有关。

正如您看到下一条错误消息:[DCC错误] wwQuery.pas(244):E2029'。'预期,但';'结果

编译器期望程序结束,并且行wwSaveAnswerTable(self,Handle,'FAnswerTable');不在OpenCursor方法中编译。这就是为什么Self没有被定义的原因。

您无需更改参数,因为肯定会影响功能。

如果您没有使用古老版本的Delphi,请尝试编译它而不使用定义:

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