Delphi 如何在一个单元中创建一个类,并在另一个单元中将其用作返回类型?
因此,我可以用Java快速简单地完成这项工作,但我认为在Delphi中尝试这样做时,我遗漏了一些东西。我有一个名为DlgDXFImporterEllipse的单元,如下所示:Delphi 如何在一个单元中创建一个类,并在另一个单元中将其用作返回类型?,delphi,class,oop,object,Delphi,Class,Oop,Object,因此,我可以用Java快速简单地完成这项工作,但我认为在Delphi中尝试这样做时,我遗漏了一些东西。我有一个名为DlgDXFImporterEllipse的单元,如下所示: unit DlgDXFImporterEllipse; interface uses Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Windows; type TDlgDXFImporterEllipse =
unit DlgDXFImporterEllipse;
interface
uses Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Windows;
type
TDlgDXFImporterEllipse = class(TObject)
private
centre : TCoord;
radius : double;
startAngle : double;
endAngle : double;
public
constructor Create(cent: TCoord; rad, startA, endA: double);
function GetCentre : TCoord;
function GetRadius : Double;
function GetStartAngle : Double;
function GetEndAngle : Double;
procedure print;
end;
var
test: TDlgDXFImporterEllipse;
implementation
constructor TDlgDXFImporterEllipse.Create(cent : TCoord; rad,startA,endA : Double);
begin
centre := cent;
radius := rad;
startAngle := startA;
endAngle := endA;
end;
function TDlgDXFImporterEllipse.GetCentre : TCoord;
begin
Result := centre;
end;
function TDlgDXFImporterEllipse.GetRadius : Double;
begin
Result := radius;
end;
function TDlgDXFImporterEllipse.GetStartAngle : Double;
begin
Result := startAngle;
end;
function TDlgDXFImporterEllipse.GetEndAngle : Double;
begin
Result := endAngle;
end;
procedure TDlgDXFImporterEllipse.print;
begin
Writeln(Output, 'Test Print');
end;
end.
现在,我想在另一个名为DlgDXFImporter的单元中创建此类作为对象:
unit DlgDFXImporter;
interface
uses Windows, SysUtils, DlgDXFImporterEllipse;
type
TDlgDXFImport = class(TForm)
private
Ellipse: TDlgDXFImporterEllipse;
function GetEllipseDxfValues(CurLine, NextLine, prevObj, lastObj: String) : Ellipse;
implementation
{$R *.dfm}
function TDlgDXFImport.GetEllipseDxfValues(CurLine, NextLine, prevObj, lastObj: String): Ellipse ;
var
centre : TCoord;
temp : Ellipse ;
begin
centre.x := 5.1;
centre.y := 80.25;
temp := Ellipse.Create(centre, 50, 82.45, 28.15);
temp.print;
Result := temp;
end;
我得到以下错误:
[DCC错误]DlgDFXImporter.pas(1752):E2005“Ellipse”不是类型标识符
我对Delphi语法还不太熟悉,无法找出我做错了什么。
任何帮助都将不胜感激。
谢谢。您的函数返回的是
椭圆
,但这不是您定义的类的名称-也许您的意思是TDlgDXFImporterEllipse
function GetEllipseDxfValues(
CurLine, NextLine, prevObj, lastObj: String) : Ellipse;
应该是:
function GetEllipseDxfValues(
CurLine, NextLine, prevObj, lastObj: String) : TDlgDXFImporterEllipse;
您必须使用类的
Create
方法,而不是实例,在您的情况下,变量eliple
是类TDlgDXFImporterEllipse
因此正确的代码应该是:
function TDlgDXFImport.GetEllipseDxfValues(CurLine, NextLine, prevObj, lastObj: String): TDlgDXFImporterEllipse
var
centre : TCoord;
begin
centre.x := 5.1;
centre.y := 80.25;
Result := TDlgDXFImporterEllipse.Create(centre, 50, 82.45, 28.15);
end;
如果您想要一个通用的
TEllipse
类型,那么您应该创建一个新的单元,定义此类型,并从dlgdxfmimporterellipse类下的TEllipse
继承您的tdlgdxmfimporterellipse
,在私有部分中,我有以下内容:Ellipse:tdlgdxmfimporterellipse;。这不管用吗?它声明了一个名为Ellipse
的字段,类型为TDlgDXFImporterEllipse
-它不会重命名类你说的是实话,会很快尝试:)如果我记得的话,如果您想在该单元中调用其他内容,可以将eliple=TDlgDXFImporterEllipse
添加到类型
部分。是的,上面的答案也是这样说的,但也谢谢您。