![]() |
Warum Fehlermeldung: Ungenügende Forward- oder External...
Hallo bekommen immer folgende Fehlermeldung :cry: :
Zitat:
Zitat:
Delphi-Quellcode:
Weiß leider nicht woran es liegt :oops:
unit uDivisor;
interface uses Windows, SysUtils; type TDivisor = class (TObject) private public procedure setZahl (a : Integer); //Hier ist Fehler Nr.1 function getDivisor : integer; //Hier ist Fehler Nr.2 end; var Zahl : Integer; implementation {$R *.dfm} procedure setZahl (a : Integer); begin Zahl := a; end; function getDivisor : integer; var a : Integer; //durchlaufende Zahl ergebnis : real; str : string; checkvar : boolean; //Wenn Teiler, dann true begin a := 1; checkvar := false; repeat ergebnis := Zahl / a; str := FloatToStr(ergebnis); if length(str)=1 then checkvar := true; until checkvar = true ; Result := StrToInt(str); end; end. Vielen Dank für die Hilfe! |
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Gegenfrage: Kannst du mir den Unterschied zwischen einer Procedure und einer Methode sagen? Wenn ja, woran erkennt man diesen im Quelltext?
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Procedure führt etwas aus und Methode ist doch ein Überbegriff für Procedures und Functions oder?
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Nein. Procedure und Funktionen sind unabhängig und diese kannst du frei deklarieren und implementieren. Methoden sind die Procedure/Funktionen einer Klasse. Diese sind explizit in der jeweiligen Klasse definiert und gehören zu dieser. Damit im Implementation Teil nun noch zuordbar ist, was zu einer Procedure und was zu einer Klasse gehört, müssen Methoden und Klassen unterschieden werden.
Beispiel:
Delphi-Quellcode:
So, im Implementation Teil müsstest du mir nun mal helfen. TestMe als Funktion, also ohne Klasse, soll false zurück liefern, während die TestMe Methode der Klasse TTest true zurück liefern soll. Wie mach ich das?
Interface
// Klasse type TTest = class // Methode deklarieren function TestMe: boolean; end; // normale Funktion deklarieren Function TestMe: boolean; ... Implementation ... |
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Wenn du das weisst, hast du die 32.000 Euro Grenze geknackt! :roll:
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Shift-Strg-C
Krieg ich jetzt die 32.000 ?? |
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Zitat:
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Deswegen sollte man nicht von Anfang an jeglichen Komfort den TD bietet kommentarlos hinnehmen, sondern auch mal selber Tippen!
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Zitat:
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Das sind aber Grundlagen der OOP, also eher 200€ Frage
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Zitat:
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Wie wäre es mit der Einarbeitung in die Grundlagen?
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Da es mehrere Klassen geben kann welche die eine Methode mit gleichem Namen haben muss natürlich auch im Implementationsteil vermerkt sein zu welcher Klasse die entsprechende Funktion gehört. Das schnellste wäre es jetzt dir einfach die Lösung zu posten. Das sinnvollste für dich ist dir einfach mal die Grundlagentutorials auf
![]() |
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Wie wäre es mit Lösung und Tutorial? So verstehe ich meinen Fehler und kann mir mit diesem im Hinterkopf das Tutorial anschauen... und es ist eine mittelschnelle Lösung des Problems :) Wäre nett...vielen Dank :-D
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
das entsprechende Tutorial gibts hier:
![]() Die Lösung ist eigentlich dort auf Anhieb zu sehen. |
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Ok, dann arbeite dich aber bitte in die Grundlagen ein!
Delphi-Quellcode:
mfg,Interface // Klasse type TTest = class // Methode deklarieren function TestMe: boolean; end; // normale Funktion deklarieren //EDIT: natürlich andersrum (hinter Implementation) Implementation Function TTest.TestMe: boolean; //<--hier ... geofranz P.S.: Hoffe das ist OK, sonst großen SORRY :oops: Edit: roter Kasten |
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Zitat:
Zitat:
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Zitat:
Delphi-Quellcode:
Implementation
... Function TTest.TestMe: boolean; //<--hier ... P.S. Warum kommt trotz delphi-Tags kein Highlighting?? |
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Dann wäre es die Lösung für den Fragesteller aber immer noch keine freie Funktion.
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Was meinst du denn mit freier Funktion??? (Properties??) :duck:
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Nein, diese ist eine klassische nicht OOP Funktion, d.h. sie gehört zu keiner Klasse.
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Moin, Moin,
ich bezweifle, dass dieses Ratespiel für den Fragesteller noch einen praktischen Nährwert hat. Natürlich ist es (meist) nicht richtig, sofort eine passende Lösung zu liefern. Andererseits kann das auch, Lernbereitschaft vorausgesetzt, manchmal motivieren das Thema weiter zu ergründen - zumindest geht mir das oft so. Dann stelle ich mal dieses Schema zur Diskussion (dass natürlich eine Instanz von TTest erzeugt werden muss, ist hier wohl nicht von Belang)...
Delphi-Quellcode:
unit Unit1;
interface { ----------------------------------------------------------------- } type TTest = class function TestMe:Boolean; // << METHODE der Klasse TTest end; function TestMe:Boolean; // << freie FUNKTION implementation { ------------------------------------------------------------ } function TestMe:Boolean; // Überall wo Unit1 eingebunden ist, begin // kann diese Funktion mit ~~:=TestMe; Result:=true // aufgerufen werden! end; function TTest.TestMe:Boolean; // diese Methode der Klasse TTest begin // MUSS mit ~~:=~~Test.TestMe; Result:=false // aufgerufen werden! end; end. |
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
@mkinzler: Achso :wall: Jetzt weiß ich was du meinst:
Hab garnicht mehr ans Beispiel von Muetze gedacht, sondern wollte nur auf die Methode mit dem Klassennamen aufmerksam machen. Natürlich ist eine Copy and Past Lösung nicht umbedingt passend, aber eine Hilfestellung ala : 'Das ist eine Methode. (Da muss der Klassenname mit angegeben werden.) Hier sind die Grundlagen.' finde ich ok. (hier halt in Code). Sorry, falls ihr den Code-Schnipsel als zu 'fertig' betrachtet. :oops: Warum funktioniert das Syntax-Highlighting bei mir nicht mehr?? :wiejetzt: |
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Warum das Highlighting bei dir nicht mehr funktioniert ist mir ein kleines Rätzel. Wenn ich mir deinen Beitrag anschaue und ihn unbearbeitet abschicke bzw. in der Vorschau anschaue stimmt das Highlighting wieder. :gruebel:
|
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Hey Leute,
das Forum hier heißt Delphipraxis und nicht Delphitheorie oder OOPtheorie oder WirLassenMalEinenAuflaufen.net @ mo_greene: Wenn Du die function der Klasse TDivisor unterordnest, ist die Implementierung
Delphi-Quellcode:
Ebenso für die andere Implementierung.
function TDivisor.getDivisor : integer;//"TDivisor." ist der springende Punkt
Nicht vergessen: Wenn Du das aufrufen willst, musst Du Deine Klasse mit TDivisor := TObject.create vorher erzeugen. Grüße, Messie |
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Zitat:
Ich halte es aus eigener Erfahrung eher mit dem Spruch: Du kannt den Leuten Fische geben, wenn sie Hunger haben. Du kannst ihnen aber auch beibringen, wie man Fische fängt und sie leiden ihr Leben lang keinen Hunger mehr. |
Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
Ausser die Fischindustrie fischt alles leer!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz