Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Function in Unit / Zugriff von anderen Units (https://www.delphipraxis.net/78489-function-unit-zugriff-von-anderen-units.html)

Tormentor32 5. Okt 2006 21:08


Function in Unit / Zugriff von anderen Units
 
Hi Leute Ich hab grad ein Problem bei einer Total einfachen sache :wall:

ich habe diese unit geschrieben und in mein programm eingebunden

Delphi-Quellcode:
unit mTlocation;

interface

uses
  extctrls;


type

  TFeldInhalt = (Boden, Mauer, TrOnEnter, TrOnUse, TrOnCollision, TrChangeLoc,_);

  TFigurenImage = class(TImage)
  private
    FX: integer;
    FY: integer;
  public
    {funktionen *********************************}
    function GetXWert: integer;
    function GetYWert: integer;
    {prozeduren *********************************}
    procedure SetXWert(value: integer);
    procedure SetYWert(value: integer);
  end;

  TFeld = class(Tobject)
    FigurenImage: TFigurenimage;
  private
    FFigurenIndex: integer;
    FInhalt: TFeldInhalt;
    FID: string;
  public
    {funktionen *********************************}
    function GetFigurenIndex: integer;
    function GetInhalt: TFeldInhalt;
    function GetID: string;
    {prozeduren *********************************}
    procedure SetFigurenIndex(value: integer);
    procedure SetInhalt(value: TFeldInhalt);
    procedure SetID(value: string);
  end;

  TLocation = class(Tobject)
  private
  public
    Felder: array[1..20,1..20] of TFeld;
  end;

implementation

function InhaltToStr(I: TFeldInhalt): string;
begin
  case I of
    Boden:         result := 'StGrd';
    Mauer:         result := 'StWal';
    TrOnEnter:     result := 'TrOnE';
    TrOnUse:       result := 'TrOnU';
    TrOnCollision: result := 'TrOnC';
  else
    result := ''
  end
end;


{************************************************}
{*************** TFigurenImage ******************}
{************************************************}

procedure TFigurenImage.SetXWert(value: integer);
begin
  FX := value;
end;

procedure TFigurenImage.SetYWert(value: integer);
begin
  FY := value;
end;

function TFigurenImage.GetXWert: integer;
begin
  result := FX;
end;

function TFigurenImage.GetYWert: integer;
begin
  result := FY;
end;

{************************************************}
{******************** TFeld *********************}
{************************************************}

procedure TFeld.SetID(value: string);
begin
  FID := value;
end;

procedure TFeld.SetInhalt(value: TFeldInhalt);
begin
  FInhalt := value;
end;

procedure TFeld.SetFigurenIndex(value: integer);
begin
  FFigurenindex := value;
end;

function TFeld.GetFigurenIndex: integer;
begin
  result := FFigurenIndex
end;

function TFeld.GetInhalt: TfeldInhalt;
begin
  result := FInhalt;
end;

function TFeld.GetID: string;
begin
  result := FID;
end;

{************************************************}
{****************** TLocation *******************}
{************************************************}
end.
ABER: Ich kann von einer anderen Unit nicht auf die function InhaltToStr zugreifen :wall:

Wo ist mein Denkfehler???
Ich komm irgendwie nicht weiter!

gruß Richard

Balu der Bär 5. Okt 2006 21:11

Re: Function in Unit / Zugriff von anderen Units
 
Du musst in der anderen Unit mTlocation zu der uses-Liste hinzufügen. Woher soll die Unit sonst auch die Funktion kennen? ;)

Zacherl 5. Okt 2006 21:12

Re: Function in Unit / Zugriff von anderen Units
 
Zitat:

ich habe diese unit geschrieben und in mein programm eingebunden
Hat er wohl schon getan ... ;)

Tormentor32 5. Okt 2006 21:14

Re: Function in Unit / Zugriff von anderen Units
 
Ich habe die Unit in der Uses-Klausel eingebunden, aber wenn ich die Function aufrufen will, dann sagt er mir Undefinierter Bezeichner!
Ich stehe irgendwie total auf dem schlauch :wall:

alzaimar 5. Okt 2006 21:14

Re: Function in Unit / Zugriff von anderen Units
 
Die Funktion ist für andere Units unsichtbar, solange sie nicht im Interface deklariert wurde, z.B. so:
Delphi-Quellcode:
unit Sample;
Interface
Function SampleFunc (aParam : Integer) : Integer;
...
Implementation
Function SampleFunc (aParam : Integer) : Integer;
Begin
  ...
  Result := ...
End;
...

Zacherl 5. Okt 2006 21:15

Re: Function in Unit / Zugriff von anderen Units
 
Du musst die Funktion auch im interface Teil der Unit deklarieren ...

//Edit: ähhm ja :mrgreen:

Balu der Bär 5. Okt 2006 21:16

Re: Function in Unit / Zugriff von anderen Units
 
Zitat:

Zitat von Florian Bernd
Hat er wohl schon getan ... ;)

Ups, ich sollte wohl besser lesen. :wall:

Tormentor32 5. Okt 2006 21:18

Re: Function in Unit / Zugriff von anderen Units
 
Dann habe ich das Problem, dass er TFeldInhalt nicht kennt, da es ja erst danach im type Bereich Deklariert wird. :(

mkinzler 5. Okt 2006 21:22

Re: Function in Unit / Zugriff von anderen Units
 
Zitat:

Zitat von Tormentor32
Dann habe ich das Problem, dass er TFeldInhalt nicht kennt, da es ja erst danach im type Bereich Deklariert wird. :(

Dann deklariere die Funktion doch vor nach den Typdeklarationen.

Tormentor32 5. Okt 2006 21:24

Re: Function in Unit / Zugriff von anderen Units
 
Jetzt habe ich ungenügende Forward oder External-Deklaration!

mkinzler 5. Okt 2006 21:26

Re: Function in Unit / Zugriff von anderen Units
 
Zitat:

Zitat von Tormentor32
Jetzt habe ich ungenügende Forward oder External-Deklaration!

Poste nochmal die neue Unit

Tormentor32 5. Okt 2006 21:29

Re: Function in Unit / Zugriff von anderen Units
 
Delphi-Quellcode:
unit mTlocation;

interface
  // Wenn ich die function hier deklariere kennt er TFeldInhalt nicht
uses
  extctrls;


type

  TFeldInhalt = (Boden, Mauer, TrOnEnter, TrOnUse, TrOnCollision, TrChangeLoc,_);

  TFigurenImage = class(TImage)
  private
    FX: integer;
    FY: integer;
  public
    {funktionen *********************************}
    function GetXWert: integer;
    function GetYWert: integer;
    {prozeduren *********************************}
    procedure SetXWert(value: integer);
    procedure SetYWert(value: integer);
  end;

  TFeld = class(Tobject)
    FigurenImage: TFigurenimage;
  private
    FFigurenIndex: integer;
    FInhalt: TFeldInhalt;
    FID: string;
  public
    {funktionen *********************************}
    function GetFigurenIndex: integer;
    function GetInhalt: TFeldInhalt;
    function GetID: string;
    {prozeduren *********************************}
    procedure SetFigurenIndex(value: integer);
    procedure SetInhalt(value: TFeldInhalt);
    procedure SetID(value: string);
  end;

  TLocation = class(Tobject)
  private
  public
    Felder: array[1..20,1..20] of TFeld;
  end;

  //Hier Habe ich besagten Error
  function InhatlToStr(I: TFeldInhalt): string;

implementation

function InhaltToStr(I: TFeldInhalt): string;
begin
  case I of
    Boden:         result := 'StGrd';
    Mauer:         result := 'StWal';
    TrOnEnter:     result := 'TrOnE';
    TrOnUse:       result := 'TrOnU';
    TrOnCollision: result := 'TrOnC';
  else
    result := ''
  end
end;

// [..]

end.

mkinzler 5. Okt 2006 21:32

Re: Function in Unit / Zugriff von anderen Units
 
Du hast die function falsch geschrieben

function InhatlToStr(I: TFeldInhalt): string;

Tormentor32 5. Okt 2006 21:34

Re: Function in Unit / Zugriff von anderen Units
 
Das gibts doch nicht ! :wall: :wall: :wall: :wall: :wall: :wall: :wall:
Da hängt man ne stunde über so ner banalen sache und dann stellt sich raus, dass es ein RECHTSCHREIBFEHLER ist...

Naja vielen Dank für die schnelle Hilfe

Richard


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:14 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