Funktion wird nicht erkannt

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Pegaro
Beiträge: 26
Registriert: So 9. Feb 2014, 14:29

Funktion wird nicht erkannt

Beitrag von Pegaro »

Hallo zusammen,

zurzeit arbeite ich an einem Geografiespiel und hänge seit einiger Zeit an einem Fehler fest.

Code: Alles auswählen

type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Edit1: TEdit;
    Edit2: TEdit;
 
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
 
  private
     function pinn(x,y:integer):tpoint;
 
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
 
var
  Form1: TForm1;
 
implementation
function tform1.pinn(x,y:integer):tpoint;
    begin
 
          image1.canvas.moveto(x,y);
          image1.canvas.lineto(x+3,y-10);
          image1.canvas.lineto(x-3,y-10);
          image1.canvas.brush.Color:=clred;
          image1.canvas.ellipse(x+5,y-12,x-5,y-7);
 
      end;
 
  function gegner1(a,b,c,d:integer;e:real):tpoint;
    begin
      c:=round(500/kilometer);
      a:=random(round(kilometer*c))+1;
      d:=random(round(kilometer*c))+1;
      e:=sqrt(sqr(a-p.x)+sqr(d-p.y));
      while c > e do
        begin
          pinn(a,d);
        end;
   end;
bei dem "pinn(a,d)" wird mir als Fehler angegeben: "identifier not found". Ändere ich dies jetz zu "tform1.pinn(a,d)" so sagt er mir: "only class methods, class properties and class variables can be accessed in class methods".

Bin bei dem Problem überfordert und hoffe ihr könnt mir helfen :)

Grüße

Pegaro

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Funktion wird nicht erkannt

Beitrag von m.fuchs »

Wenn du von außen (außerhalb deiner Klasse) die Methode pinn aufrufen möchtest, darf sie nicht private sein. Verschiebe sie mal nach public.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Funktion wird nicht erkannt

Beitrag von Michl »

m.fuchs hat geschrieben:Wenn du von außen (außerhalb deiner Klasse) die Methode pinn aufrufen möchtest, darf sie nicht private sein. Verschiebe sie mal nach public.
oder function gegner1 in die gleiche Klasse (tform1).

Funktionieren würde in Deinem Fall auch nur "form1.pinn(a,d)" statt "tform1.pinn(a,d)" - also der Aufruf der Instanz, nicht der Klasse! Siehe z.B. http://www.delphi-treff.de/object-pasca ... ekte#c4939, wenn nach public verschoben.
Zuletzt geändert von Michl am So 9. Feb 2014, 16:23, insgesamt 1-mal geändert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Pegaro
Beiträge: 26
Registriert: So 9. Feb 2014, 14:29

Re: Funktion wird nicht erkannt

Beitrag von Pegaro »

danke für die Antwort m.fuchs, leider wurde das Problem nicht behoben...

//edit: @ michl, vielen dank jetz funktioniert alles wieder :D

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Funktion wird nicht erkannt

Beitrag von m.fuchs »

Pegaro hat geschrieben:danke für die Antwort m.fuchs, leider wurde das Problem nicht behoben
Stimmt, weil dann der zweite Fehler das Problem wird, nämlich die fehlende Objektreferenz beim Aufruf. Aber wenn es dir damit reicht, dass deine Prozedur jetzt in der Klasse liegt ist ja alles ok.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Funktion wird nicht erkannt

Beitrag von marcov »

m.fuchs hat geschrieben:Wenn du von außen (außerhalb deiner Klasse) die Methode pinn aufrufen möchtest
Private is nicht aufrufbar außerhalb der Unit. "Strict private" außerhalb der Klasse.

Antworten