Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Warum Fehlermeldung: Ungenügende Forward- oder External... (https://www.delphipraxis.net/109425-warum-fehlermeldung-ungenuegende-forward-oder-external.html)

mo_greene 1. Mär 2008 01:13


Warum Fehlermeldung: Ungenügende Forward- oder External...
 
Hallo bekommen immer folgende Fehlermeldung :cry: :
Zitat:

[Pascal Fehler]uDivisor.pas(14): E2065 Ungenügende Forward- oder External-Deklaration: 'TDivisor.setZahl'
Zitat:

[Pascal Fehler]uDivisor.pas(15): E2065 Ungenügende Forward- oder External-Deklaration: 'TDivisor.getDivisor'
bei folgendem Code:
Delphi-Quellcode:
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.
Weiß leider nicht woran es liegt :oops:

Vielen Dank für die Hilfe!

Muetze1 1. Mär 2008 01:15

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?

mo_greene 1. Mär 2008 01:16

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?

Muetze1 1. Mär 2008 01:23

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:
Interface

  // Klasse
type
  TTest = class
      // Methode deklarieren
    function TestMe: boolean;
  end;

  // normale Funktion deklarieren
Function TestMe: boolean;

...

Implementation

...
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?

phXql 1. Mär 2008 01:40

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
Wenn du das weisst, hast du die 32.000 Euro Grenze geknackt! :roll:

gmc616 1. Mär 2008 02:16

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
Shift-Strg-C

Krieg ich jetzt die 32.000 ??

Dax 1. Mär 2008 02:36

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
Zitat:

Zitat von gmc616
Shift-Strg-C

Krieg ich jetzt die 32.000 ??

Ja, aber vom Konto abgebucht.

inherited 1. Mär 2008 09:49

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!

mo_greene 1. Mär 2008 11:45

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
Zitat:

Zitat von Muetze1
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:
Interface

  // Klasse
type
  TTest = class
      // Methode deklarieren
    function TestMe: boolean;
  end;

  // normale Funktion deklarieren
Function TestMe: boolean;

...

Implementation

...
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?

Weiß ich leider nicht :oops: Krieg ich die 32000€ wohl nicht :cry:

mkinzler 1. Mär 2008 11:58

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
Das sind aber Grundlagen der OOP, also eher 200€ Frage

mo_greene 1. Mär 2008 13:44

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
Zitat:

Zitat von mkinzler
Das sind aber Grundlagen der OOP, also eher 200€ Frage

Das hilft mir leider nicht weiter :cry:

mkinzler 1. Mär 2008 13:46

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
Wie wäre es mit der Einarbeitung in die Grundlagen?

SirThornberry 1. Mär 2008 13:50

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 http://www.delphi-treff.de/ anzusehen.

mo_greene 1. Mär 2008 13:55

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

SirThornberry 1. Mär 2008 13:58

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
das entsprechende Tutorial gibts hier: http://www.delphi-treff.de/sprachen/...scal/methoden/
Die Lösung ist eigentlich dort auf Anhieb zu sehen.

geofranz01 1. Mär 2008 14:01

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
Ok, dann arbeite dich aber bitte in die Grundlagen ein!

Delphi-Quellcode:

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
...
mfg,
geofranz

P.S.: Hoffe das ist OK, sonst großen SORRY :oops:
Edit: roter Kasten

mkinzler 1. Mär 2008 14:04

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
Zitat:

Zitat von geofranz01
Ok, dann arbeite dich aber bitte in die Grundlagen ein!

Delphi-Quellcode:
Interface

  // Klasse
type
  TTest = class
      // Methode deklarieren
    function TestMe: boolean;
  end;

  // normale Funktion deklarieren
Function TTest.TestMe: boolean; //<--hier

...

Implementation

...
mfg,
geofranz

P.S.: Hoffe das ist OK, sonst großen SORRY :oops:
Edit: roter Kasten

Zitat:

Delphi-Quellcode:
Function TTest.TestMe: boolean;

ist leider keine freie Funktion!!!

geofranz01 1. Mär 2008 14:37

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
Zitat:

Zitat von mkinzler
ist leider keine freie Funktion!!!

oops! :oops: Muss natürlich hinter implementation: (oder??)


Delphi-Quellcode:
Implementation
...

Function TTest.TestMe: boolean; //<--hier

...



P.S. Warum kommt trotz delphi-Tags kein Highlighting??

mkinzler 1. Mär 2008 14:42

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.

geofranz01 1. Mär 2008 14:44

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
Was meinst du denn mit freier Funktion??? (Properties??) :duck:

mkinzler 1. Mär 2008 14:46

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
Nein, diese ist eine klassische nicht OOP Funktion, d.h. sie gehört zu keiner Klasse.

taaktaak 1. Mär 2008 15:02

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.

geofranz01 1. Mär 2008 15:16

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:

SirThornberry 1. Mär 2008 15:24

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:

messie 1. Mär 2008 15:46

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:
function TDivisor.getDivisor : integer;//"TDivisor." ist der springende Punkt
Ebenso für die andere Implementierung.

Nicht vergessen: Wenn Du das aufrufen willst, musst Du Deine Klasse mit TDivisor := TObject.create vorher erzeugen.

Grüße, Messie

Muetze1 1. Mär 2008 19:57

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
Zitat:

Zitat von messie
das Forum hier heißt Delphipraxis und nicht Delphitheorie oder OOPtheorie oder WirLassenMalEinenAuflaufen.net

Das ist aber nicht ein Problem aus der alltäglichen Praxis sondern eher noch Anfangsstadium. Mit meiner Frage wollte ich das so näher bringen, dass er selbst darauf kommt, das hilft ihm in der Praxis später mehr als Copy & Paste. Ohne Grundlagen ist nunmal die beste Praxis nichts.

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.

phXql 2. Mär 2008 11:21

Re: Warum Fehlermeldung: Ungenügende Forward- oder External.
 
Ausser die Fischindustrie fischt alles leer!


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