2014-01-08 20 views
1

所以我可以在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語法來找到我做錯了什麼。 任何幫助將不勝感激。 謝謝。

回答

0

你的函數返回Ellipse,但這不是你定義的類的名字 - 也許你的意思是TDlgDXFImporterEllipse

function GetEllipseDxfValues(
    CurLine, NextLine, prevObj, lastObj: String) : Ellipse; 

應該是:

function GetEllipseDxfValues(
    CurLine, NextLine, prevObj, lastObj: String) : TDlgDXFImporterEllipse; 
+0

根據DlgDXFImported類,私人部分,我有這樣的:橢圓形:TDlgDXFImporterEllipse ;.這不行嗎? –

+0

這聲明瞭一個名爲'Ellipse'的類型爲'TDlgDXFImporterEllipse'的字段 - 它不會重命名類 – Blorgbeard

+0

您說實話,會很快試一試:) –

1

您必須使用類,而不是實例的Create方法,在你的情況下,變量Ellipse是類的一個實例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; 

i F你想有一個通用的TEllipse類型,那麼您應該創建一個新的單位,定義該類型和繼承你TDlgDXFImporterEllipseTEllipse

+0

是的,上面的答案說的是同樣的事情,但是也要謝謝。 –

相關問題