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

时间:2016-03-17 23:57:46

标签: delphi

我不知道为什么我在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.

如果您发现代码中有任何错误,请告诉我,已经有一段时间了,因为我已经被困在互联网上。

我不知道造成这种情况的原因是我第一次使用这个组件。

1 个答案:

答案 0 :(得分:2)

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

从另一个角度来看,您的TForm1类有一个XMLDocument1成员和一个LeerXML方法。但LeerXML方法是编译器抱怨的方法。我现在暂不再解释了,当你读到这个时,你应该感觉到一分钱......

顺便说一下,一旦你意识到问题是什么,你可能会意识到你所看到的错误是因为Delphi的一个限制是单通道编译器停止在第一个它遇到的错误。如果不是(单通,停止第一次错误)它可以做一个更有帮助的工作来确定问题到底是什么。