Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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_Class_Oop_Object - Fatal编程技术网

Delphi 如何在一个单元中创建一个类,并在另一个单元中将其用作返回类型?

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 =

因此,我可以用Java快速简单地完成这项工作,但我认为在Delphi中尝试这样做时,我遗漏了一些东西。我有一个名为DlgDXFImporterEllipse的单元,如下所示:

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
添加到
类型
部分。是的,上面的答案也是这样说的,但也谢谢您。