声明对象上的未声明标识符


我不知道

为什么我在delphi上收到此错误:

unit Unit1;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Xml.xmldom, Xml.XMLIntf,
  XMLDoc;

type
  TForm1 = class(TForm)
    XMLDocument1: TXMLDocument;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    procedure ComboBox1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure LeerXML();
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure LeerXML ();
var
 Query : IXMLNode;
begin
  XMLDocument1.FileName := 'Query.xml'; <- RIGHT HERE SAYS "[dcc32 Error] Unit1.pas(36): E2003 Undeclared identifier: 'XMLDocument1'"
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  LeerXML();
end;
end.

如果您在代码中发现任何错误,请告诉我,自从我在互联网上陷入困境以来

已经有一段时间了。

我不知道是什么原因造成的,这是我第一次使用此组件。

您展示的 LeerXML 例程不是 TForm1 类的方法,它是一个与它无关的独立过程。 就编译器而言,两者没有任何联系,这就是为什么它抱怨 XmlDocument1 是一个未知的标识符。 编译器无法像您(错误地从编译器的 pov 中)那样看到连接。

换个角度看,TForm1 类有一个 XMLDocument1 成员和一个 LeerXML 方法。 但是LeerXML方法并不是编译器抱怨的方法。 我现在不打算再解释了,当你读到这篇文章时,你应该感觉到一分钱在下降......

顺便说一句,一旦你意识到

问题是什么,你可能会意识到你所看到的错误是由于Delphi是一个单通道编译器的局限性之一,它在遇到的第一个错误时停止。 如果不是(单次通过,在第一次错误时停止),它可以在确定问题真正是什么方面做得更有用。

最新更新