请教个delphi中有关类中的问题(100分)

  • 主题发起人 主题发起人 netbug
  • 开始时间 开始时间
N

netbug

Unregistered / Unconfirmed
GUEST, unregistred user!
请看以下的例子,它包括两个unit,分别为unit1与unit2:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
type
TNum=class
public
n1:integer;
n2:string;
public
constructor create;
end;
constructor Tnum.create;
begin
n1:=111;
n2:='aaa';
end;
end.


unit Unit2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
uses
unit1;
procedure TForm1.Button1Click(Sender: TObject);
var
num1:Tnum;
begin
num1:=tnum.create;
edit1.text:=inttostr(num1.n1);
edit2.text:=num1.n2;
num1.free;
end;

end.
但在编译unit2时,老是提示:undeclared identifier:'Tnum',但Tnum是在unit1中定义的类,
并在unit2中有uses unit1,我想问:这是为何?如何解决?
谢谢。
 
你应该将类定义放在interface部分而不是implementation部分。改为这样:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;

type
TNum=class
public
n1:integer;
n2:string;
public
constructor create;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
constructor Tnum.create;
begin
n1:=111;
n2:='aaa';
end;
end.

 
把TNum的定义由implementation调到interface中
 
在Implementation中定义的类型,别的单元不能引用
在Interface中定义的才可以
 
是啊, 他们说的没错
只有在, interface 中定义的类型, 变量, 过程, 函数 才能被
别的单元访问, implamention 中定义等内容, 是为了本单元
的实现而定义的, 因此, 只能被本单元访问. 所以, 你应该把
定义方到interface 部分中去.
付总请客, 和多了.......
 
:)

多日不来,好多新面孔啊。
 
习习,我发现你喜欢晚上出来活动. :-)

我的睡了. 给你拜个年.
 
和小生曾经遇到的问题一模一样,在此我多说两句,希望你把这些问题彻底弄清。
一个单元分interface,implamentation,initialization,finalization四个部分,
interface:由uses子句,常量声明,类型声明,变量声明,过程和函数声明。不论
本单元或是其他单元都可使用。
implamentation:此中声明只对本单元是公共的,其他单元即使引用了该单元,也
不能使用这些声明。
initialization:用于对该单元初始化,如给变量赋初值。
finalization:注意,单元必须有initialization,才可有finalization,主要用于
释放initialization部分分配的资源。
 
大家把该讲的都讲了,我也不用废话了!
 
可怜我来晚了!
 
多人接受答案了。
 
后退
顶部