Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   uses-Klausel (https://www.delphipraxis.net/171281-uses-klausel.html)

Mojito 29. Okt 2012 21:05

uses-Klausel
 
Hallo Freunde,

ich habe mal wieder eine simple Frage: Ich möchte ein in einer anderen Unit(UParameters) definierten Aufzählungstyp in eine Unit einbinden, dies mit der uses-Klausel:


Delphi-Quellcode:
interface

uses UParameters;

// wandelt einen Operator vom Typ TOperator in seine Stringdarstellung um
function opToString(op:TOperator):string;
Leider erkennt die Funktion "Toperator" nicht an. Was habe ich (simples) falsch gemacht?
Vielen Dank

Sir Rufo 29. Okt 2012 21:10

AW: uses-Klausel
 
Das sieht eigentlich gut aus, allerdings kann man das erst abschließend sagen, wenn man die Unit UParameters sieht.

Mojito 29. Okt 2012 21:13

AW: uses-Klausel
 
unit UParameters;

Delphi-Quellcode:
interface

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

type
  TFrmSettings = class(TForm)
    GroupBox2: TGroupBox;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    SpnEdtTaskNumber: TSpinEdit;
    RdGrpOperator: TRadioGroup;
type
TOperator = (opPlus, opMinus, opMultiply, opDivide);

Sir Rufo 29. Okt 2012 21:16

AW: uses-Klausel
 
Delphi-Quellcode:
TFrmSettings.TOperator

Mojito 29. Okt 2012 21:18

AW: uses-Klausel
 
au! Natürlich
THX

Medium 30. Okt 2012 01:15

AW: uses-Klausel
 
Um eine Hand voll mehr Erklärung zu liefern: Du hast dort einen Nested-Type gebaut, der nur innerhalb der Klasse, in der er definiert wurde bekannt ist. Richtig eingerückt müsste es also so aussehen:
Delphi-Quellcode:
interface

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

type
  TFrmSettings = class(TForm)
    GroupBox2: TGroupBox;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    SpnEdtTaskNumber: TSpinEdit;
    RdGrpOperator: TRadioGroup;
    type
      TOperator = (opPlus, opMinus, opMultiply, opDivide);
Ein simples "end;" würde daraus einen Unit-weiten Type machen:
Delphi-Quellcode:
interface

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

type
  TFrmSettings = class(TForm)
    GroupBox2: TGroupBox;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    SpnEdtTaskNumber: TSpinEdit;
    RdGrpOperator: TRadioGroup;
  end; // <- Deklaration von TFrmSettings beendet
type // <- Neue Types im Scope der gesamten Unit
  TOperator = (opPlus, opMinus, opMultiply, opDivide);
Da TOperator offenbar auch ausserhalb von TFrmSettings verwendet wird, wäre die 2. Variante sematisch besser. Noch besser wäre es - gerade wenn man TOperator Felder in dem Formular haben mag - TOperator vorher zu definieren. Zudem kann man sich das zweite "type" sparen, es können beliebig viele Deklarationen unter einem "type" folgen:
Delphi-Quellcode:
interface

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

type
  TOperator = (opPlus, opMinus, opMultiply, opDivide);

  TFrmSettings = class(TForm)
    GroupBox2: TGroupBox;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    SpnEdtTaskNumber: TSpinEdit;
    RdGrpOperator: TRadioGroup;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz