Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 在其他形式中使用声明的公共变量时出现编译器错误_Delphi_Variables_Public_Delphi Xe3 - Fatal编程技术网

Delphi 在其他形式中使用声明的公共变量时出现编译器错误

Delphi 在其他形式中使用声明的公共变量时出现编译器错误,delphi,variables,public,delphi-xe3,Delphi,Variables,Public,Delphi Xe3,我以前声明过许多公共变量,但在Delphi中,XE3是第一个 我声明公共var是好的,但不能在其他形式上使用它,但我不知道为什么 我的主要代码: unit uMian; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCt

我以前声明过许多公共变量,但在Delphi中,XE3是第一个

我声明公共var是好的,但不能在其他形式上使用它,但我不知道为什么

我的主要代码:

unit uMian;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls;

type
  TForm1 = class(TForm)
    btnLoad: TButton;
    btnShow: TButton;
    btnEaxit: TButton;
    lvStudent: TListView;
    btnAdd: TButton;
    procedure btnEaxitClick(Sender: TObject);
    procedure btnLoadClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnAddClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations } 
  var
    IsOpen : Boolean ;

  public
    { Public declarations }
    var
      myvar : Integer ;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses uAdd;


function AppDir () : string ;
begin
  Result := ExtractFilePath(Application.ExeName);
end;

procedure TForm1.btnAddClick(Sender: TObject);
begin
  if IsOpen then
  frmAdd.ShowModal ;
end;

procedure TForm1.btnEaxitClick(Sender: TObject);
begin
  close;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if IsOpen then
  //CloseFile(DataFile);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  IsOpen := False ;
end;

....

end.
这是一项毫无问题的好工作

但当我在其他表格FrmAdd上使用时,我遇到了问题:

unit uAdd;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons,
  Vcl.Samples.Spin, Vcl.ExtCtrls;

type
  TfrmAdd = class(TForm)
    lbledtName: TLabeledEdit;
    lbledtAvg: TLabeledEdit;
    seAge: TSpinEdit;
    lbleId: TLabeledEdit;
    btnCansek: TBitBtn;
    btnAdd: TBitBtn;
    procedure btnAddClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmAdd: TfrmAdd;

implementation

{$R *.dfm}

uses uMian;

procedure TfrmAdd.btnAddClick(Sender: TObject);

begin
  // problem in below 
  ShowMessage(IntToStr(TForm1.myvar)) ;
end;

end.
编译器错误: [dcc32错误]uAdd.pas(问题行):应为E2096方法标识符


注意:Cnpack在变量列表中显示我
myvar
,但Rad Studio自动完成不显示

myvar
是对象的公共变量,即类
TForm1
的实例。因此,您需要指定所引用的实例。但是当您编写
TForm1.myvar
时,您没有指定任何实例,只指定了类

这就像知道每个人都有一种被称为“性”的属性,然后你问,“人的性别是什么?”。[哪个人?]

解决方案是编写
someform.myvar
,其中
someform
TForm1
的一个实例。例如,
Form1.myvar
,很可能就是您想要的。请注意,您可以在
uMain
中找到
var Form1:TForm1
。这是声明表单变量的行:您得到了一个指向类
TForm1
的对象的变量


因此,相反,您会问,“您的朋友Smith的性别是什么?”

myvar
是对象的公共变量,即类
TForm1
的实例。因此,您需要指定所引用的实例。但是当您编写
TForm1.myvar
时,您没有指定任何实例,只指定了类

这就像知道每个人都有一种被称为“性”的属性,然后你问,“人的性别是什么?”。[哪个人?]

解决方案是编写
someform.myvar
,其中
someform
TForm1
的一个实例。例如,
Form1.myvar
,很可能就是您想要的。请注意,您可以在
uMain
中找到
var Form1:TForm1
。这是声明表单变量的行:您得到了一个指向类
TForm1
的对象的变量


因此,你会问:“你朋友史密斯的性别是什么?”

哦,谢谢你的回答:)+1代表“性别”,因为当然,眼睛的颜色和高度都很无聊。如果让我猜的话,史密斯是一个棕色眼睛,175厘米的男性。哦,谢谢你的回答:)+1代表“性”,因为当然,眼睛的颜色和高度都很无聊。如果让我猜的话,Smith是一个棕色眼睛、175厘米长的男性。根据您使用Instanced变量或class变量的意图,您必须更改您的声明:class var myvar:integer;或者调用Instance.myvar根据您使用Instanced变量或类变量的意图,您必须更改声明:class var myvar:integer;或者调用Instance.myvar