编译器错误 "E2003 Undeclared identifier"

Compiler error "E2003 Undeclared identifier"

在此代码中:

uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, 
  Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, 
  IdTCPClient, IdIOHandler, IdGlobal, StdCtrls;

function WaitForCommand(args: Pointer): Cardinal; stdcall;
begin
  while client.Connected do
    if not HandleResponse(client.IOHandler) then
      break;
  Result := 0;
end;

我有这个错误:

[DCC Error] Unit1.pas(159): E2003 Undeclared identifier: 'HandleResponse'

如何理解消息?

让我们分部分阅读:

  1. [DCC Error]

    DCC 是 Delphi 编译器,所以它是关于我们的代码,而不是关于链接或打包。

  2. Unit1.pas

    发生错误的文件。通常 Delphi 的编辑器会自动向您显示此文件。

  3. (159)

    发生错误的行。通常 Delphi 的编辑器会自动将您的文本光标放入此行。

  4. E2003

    这是错误代码,以防任何进一步的文本不可用。这就像 HTTP 的状态 404 是一个代码(带有实际文本“未找到”)或者像交通信号灯 red 是一个代码(没有任何进一步的文本告诉您停止)。

  5. Undeclared identifier:

    此时编译器不知道如何解释现在命名的内容。甚至无法告诉您它是缺少函数、缺少类型还是其他 - 因此整体术语“identifer”。

  6. 'HandleResponse'

    通常 Delphi 的编辑器会自动将您的文本光标放在无法理解的文本开头的问题行中。

你能做什么?

未申报。声明它。然而,只有你自己才能知道你想要什么。你可以

  • 声明一个类型:
    type
      HandleResponse= Boolean;
    
  • 定义一个函数:
    function HandleResponse(h: TIdIOHandler): Boolean;
    begin
      result:= FALSE;
    end;
    
  • 从 DLL 导入函数:
    function HandleResponse(p: Pointer): LongBool; stdcall; external 'any.dll';
    
  • 添加可能已经拥有它的单位:
    uses
      WhatIsMissingSoFar;
    

...或者做其他我还需要记住的事情。但我相信您明白,在这 3 个示例中,identifier HandleResponse 现在 declared。不用我告诉你在使用之前必须做声明吧?