Autor Beitrag
jackle32
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 7

Win7
Delphi XE5 Starter, RAD Studio XE7 Pro
BeitragVerfasst: Fr 04.01.13 21:12 
Hallo zusammen,

ich habe ein sehr merkwürdigen Fehler wenn ich eine Funktion in eine andere Unit auslagere.

Hier mal der Quellcode

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
//Hier die Hauptunit

unit UtUI;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, xmldom, XMLIntf, msxmldom, XMLDoc, UtMaschine;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    Button2: TButton;
    XMLDocument1: TXMLDocument;
    Button3: TButton;
    TreeView1: TTreeView;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    //masternode: TTreenode;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  self.Memo1.Lines.LoadFromFile('Dateipfad');  //Pfad wurde von mir verändert!
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin

  i := test; //Hier will ich die Funktion aufrufen

  self.Memo2.Lines.Add('Analysierte Zeilen: ' + inttostr(i));
end;

end.


Hier die zweite Unit "UtMaschine".

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
unit UtMaschine;

interface

implementation

function test: integer;
var
  i : integer;
begin
  i := 0;
  i := i+1;
  result := i;
end;

end.


Der Fehler der dabei immer kommmt ist:
ausblenden Delphi-Quelltext
1:
[Error] UtUI.pas(48): Undeclared identifier: 'test'					


Hab keine Ahnung mehr wo der Fehler noch stecken kann.

Das gleiche Problem hab ich auch noch mit einer anderen Funktion aus einer anderen Unit.

Gruß
Jack

_________________
Es gibt keine dummen Fragen, nur dumme Antworten.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 04.01.13 21:15 
Du hast die Funktion im Moment nur unter implementation definiert. In der Schnittstelle nach außen, zu anderen Units, also unter interface, hast du die nicht drin. Deshalb kannst du sie von außen auch nicht nutzen. Funktionieren tut es so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
unit UtMaschine;

interface

function test: integer;

implementation

function test: integer;
var
  i : integer;
begin
  i := 0;
  i := i+1;
  result := i;
end;

end.
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Fr 04.01.13 21:16 
Moin,

damit die Funktion nach außen hin sichtbar ist, musst du sie auch Deklarieren.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
[...]
interface

  function test : integer;

implementation
  
function test : integer
begin

end;


€dit: Too late, apologize!
jackle32 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 7

Win7
Delphi XE5 Starter, RAD Studio XE7 Pro
BeitragVerfasst: Fr 04.01.13 21:20 
Super danke euch!!

Jetzt funktionierts.

Danke nochmals.

Gruß
Jack

_________________
Es gibt keine dummen Fragen, nur dumme Antworten.