Identifier not found "XYZ" - Funktion aufrufen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Cargo_03
Beiträge: 10
Registriert: Sa 8. Mai 2010, 14:42
OS, Lazarus, FPC: WIN 1.4.4 / 1.8.4
CPU-Target: 64 Bit

Identifier not found "XYZ" - Funktion aufrufen

Beitrag von Cargo_03 »

Hallo,

habe ein blödes Anfänger-Problem.
Ich habe eine Funktion definiert.
unit main;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, bla,bla.........;

type
bla,bla,bla
private
{ private declarations }
public
{ public declarations }
end;

var
mainform : Tmainform;

implementation

Uses ZClasses;

{Und hier kommt meine eigene Funktion}

Function Testlauf (ArtID : Integer) : Boolean;
Begin
bla,bla,bla
End;

{Ende der Function}

hier kommt dann der Rest von main

initialization
{$I main.lrs}

end.


So, nun mein Problem, wenn ich nun diese Funktion in einer anderen Unit aufrufen will, so musste ich unter Delphi nur die Unit, in der die Funktion steht mit Uses angeben und konnte diese Funktion dann benutzen. Also in der anderen Unit "Datenmodul" Uses main; angeben und es konnte losgehen. Nun bekomme ich die Fehlermeldung (Identifier not found "Funktions-Name"). Muss ich die Funktion in der Unit, in der ich diese geschrieben habe noch irgendwo registrieren, eintragen, etc. ??

Gruß Cargo_03

Benutzeravatar
theo
Beiträge: 10934
Registriert: Mo 11. Sep 2006, 19:01

Re: Identifier not found "XYZ" - Funktion aufrufen

Beitrag von theo »

Das geht mit Sicherheit auch bei Delphi nicht.
Du musst die Funktion schon im interface Teil der Unit angeben.
Bei einer normalen Funktion also forward deklarieren.

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Identifier not found "XYZ" - Funktion aufrufen

Beitrag von shokwave »

mfg Ingo

Cargo_03
Beiträge: 10
Registriert: Sa 8. Mai 2010, 14:42
OS, Lazarus, FPC: WIN 1.4.4 / 1.8.4
CPU-Target: 64 Bit

Re: Identifier not found "XYZ" - Funktion aufrufen

Beitrag von Cargo_03 »

Theo:
Das geht mit Sicherheit auch bei Delphi nicht.
Du musst die Funktion schon im Interface Teil der Unit angeben.
Bei einer normalen Funktion also forward deklarieren.

Also erst mal herzlichen Dank für die schnelle Hilfe.

Wenn ich die Funktion unter PUBLIC des Interface-Teil eintrage, klappt es. Allerdings ist dann bei der
Definition der Funktion der Name der Form voran zustellen.

Wenn ich nun im Implementations Teil irgend einer anderen Unit, Uses main; eintrage und die Funktion mit

TMainForm.TestLauf(xxx) aufrufe, dann klappt es.

Danke...

Ich habe auch den Grund meiner fehlerhaften Annahme mit Delphi gefunden. (Lässt einen ja nicht Kalt.} :roll: Ich hatte wohl bisher die Funktionen
immer nur LOCAL in der jeweiligen Unit benutzt. Und war der Annahme, das sich die Funktionen (selbstgeschieben)
genauso verhalten, wie Komponenten, die ja im Interfaceteil deklariert sind.

Tjo, damit bin ich X Jahre zurechtgekommen. Wunder gibt es immer wieder.

Aber man lernt nie aus. :oops:

Ok, gelöst.. :)

Cargo_03

Code: Alles auswählen

unit main;
 
{$mode objfpc}{$H+}
 
interface
 
uses
Classes, SysUtils, FileUtil, bla,bla.........;
 
type
bla,bla,bla
private
{ private declarations }
public
{ public declarations }
 Function Testlauf (ArtID: Integer) : Boolean;   { Da muss die Funktion eingetragen werden}
end;
 
var
mainform : Tmainform;
 
implementation
 
Uses ZClasses;
 
{Und hier kommt meine eigene Funktion}
 
Function TMainForm.Testlauf (ArtID : Integer) : Boolean;   {Wichtig, die Angabe der Form, wie immer sie auch jeweils heissen mag.}
Begin
   bla,bla,bla
End;
 
{Ende der Function}
 
hier kommt dann der Rest von main
 
initialization
{$I main.lrs}
 
end.

Benutzeravatar
theo
Beiträge: 10934
Registriert: Mo 11. Sep 2006, 19:01

Re: Identifier not found "XYZ" - Funktion aufrufen

Beitrag von theo »

Cargo_03 hat geschrieben: Wenn ich die Funktion unter PUBLIC des Interface-Teil eintrage, klappt es. Allerdings ist dann bei der
Definition der Funktion der Name der Form voran zustellen.
Dann wird die Funktion aber zur Methode der Klasse.
Es klappt auch sonst. Einfach oberhalb von "implementation" den Funktionskopf nochmals hinschreiben.

Antworten