Methodendefinition ungleich Deklaration???

Für Fragen rund um die Ide und zum Debugger
fpGUIcoder
Beiträge: 199
Registriert: Di 20. Okt 2015, 23:13

Methodendefinition ungleich Deklaration???

Beitrag von fpGUIcoder »

Hallo,

ich habe diese Fehlermeldungen erhalten beim Kompilieren:

...(1668,18) Error: function header doesn't match any method of this class "TSystem.GetSoundFile(LongInt):ShortString;"
...(425,16) Hint: Found declaration: TSystem.GetSoundFile(LongInt):ShortString;
...(1673,19) Error: function header doesn't match any method of this class "TSystem.SetSoundFile(LongInt,ShortString);"
...(426) Hint: Found declaration: TSystem.SetSoundFile(LongInt,ShortString);


Wie ist das zu erklären?

Die Hints sagen doch, dass die Deklaration korrekt ist gegenüber dem Funktionskopf.

Habe zuerst mit Strg+Shift+C die Methoden erzeugt, aber dabei nicht beachtet, dass es sich um eine Array Eigenschaft handelt. Longint ist daher der Index, den ich den Methodenköpfen dann auch manuell hinzugefügt habe.

Ist da etwa noch irgendeine Info zur vorherigen Deklaration ohne (Index:Longint) irgendwo gespeichert? Die wäre dann ein Bugreport, denn laut Fehlertabelle stimmen ja die Deklarationen überein.

TSystem ist keine Standardklasse von Freepascal, sondern stammt aus einer externen Bibliothek.

marcov
Beiträge: 1100
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: Methodendefinition ungleich Deklaration???

Beitrag von marcov »

longint oder shortstring redeclariert ?

fpGUIcoder
Beiträge: 199
Registriert: Di 20. Okt 2015, 23:13

Re: Methodendefinition ungleich Deklaration???

Beitrag von fpGUIcoder »

marcov hat geschrieben:longint oder shortstring redeclariert ?


Es handelt sich um eine Arrayeigenschaft. Die einzelnen Elemente haben den Typ Shortstring. Longint steht für die Indexvariable.

Code: Alles auswählen

 
TFileNameArray = array[0..max] of ShortString;
TSystem = class
   ...
   FSoundFile: TFileNameArray;
 
  function GetSoundFile(Index: Integer): ShortString;
  procedure SetSoundFile(Index: Integer; AValue: ShortString);

public
  property SoundFile[Index: Integer]: ShortString read GetSoundFile write SetSoundFile;
 


Habe sogar die vorherigen Methoden auskommentiert und nochmals mit Strg+Shift+C neu erzeugt. Die Fehlermeldung kommt noch immer.

marcov
Beiträge: 1100
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: Methodendefinition ungleich Deklaration???

Beitrag von marcov »

Code: Alles auswählen

 
{$mode delphi}
type
TSystem = class
  function GetSoundFile(index: Integer): ShortString;
  procedure SetSoundFile(index: Integer; AValue: ShortString);
public
  property SoundFile[index: Integer]: ShortString read GetSoundFile write SetSoundFile;
  end;
 
 
function TSystem.GetSoundFile(index: Integer): ShortString;
begin
end;
 
procedure TSystem.SetSoundFile(index: Integer; AValue: ShortString);
begin
end;
 
begin
end.
 


Kompiliert ohne Problemen. Also Beispiel ausbreiten.

fpGUIcoder
Beiträge: 199
Registriert: Di 20. Okt 2015, 23:13

Re: Methodendefinition ungleich Deklaration???

Beitrag von fpGUIcoder »

Schön, marcov, dass es bei Dir schon mal funktioniert!!!

Das Programm, bzw, die Unit liefere ich dann, wenn ich den Fehler bei mir gefunden habe. Dann werde ich eh die Lib als Open Source veröffentlichen. Ist aber halt schon eine etwas ältere Bibliothek, die als hoffnungslos veraltet geten dürfte. Daher ist mir wichtig, dass sie wenigstens auch rundum funktioniert, bevor ich die auf die ALlgemeinheit los lasse. Vorher bleibt das alles geheim, als ob es sich um Propertiäre Software handeln würde.

Bei mir in Lazarus 1.2.X mit fpc 2.6.4 tritt der Fehler auf. FPC 3.0 übersetzt die Bibliothek gar nicht erst. So bin ich auf die Vorgängerversion angewisen.

Ich habe beide Lazarus Versionen installiert. 1.2.6 und 1.6. FPC 2.6.4 und FPC 3.0.0 und noch Version 1.0.10, letztere ohne Lazarus.

Warum kann ich nicht einfach für alle Arten von Bibliotheken die altuelle FPC Version verwenden, dann hätte ich das vorliegende Problem vielleicht gar nicht.

Du hast wahrscheinlich mit Lazarus 1.6 getestet, ich habe den Fehler aber bei der Vorgängerversion 1.2.6. Sorry for that. Ich habe den Fehler bei mir und muss für meine Bibliothek diese Version verwenden, weil die aktuelle Version da aussteigt, bei der Übersetzung.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2639
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: Methodendefinition ungleich Deklaration???

Beitrag von m.fuchs »

Wie immer hilft auch hier: Minimal-Beispiel bei dem der Fehler auftritt zusammenstellen und hier im Forum posten. Dazu eine exakte Versionsnumemr bei der es schiefgeht und schon können andere Menschen sich das Problem mal ansehen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

fpGUIcoder
Beiträge: 199
Registriert: Di 20. Okt 2015, 23:13

Re: Methodendefinition ungleich Deklaration???

Beitrag von fpGUIcoder »

m.fuchs hat geschrieben:Wie immer hilft auch hier: Minimal-Beispiel bei dem der Fehler auftritt zusammenstellen und hier im Forum posten. Dazu eine exakte Versionsnumemr bei der es schiefgeht und schon können andere Menschen sich das Problem mal ansehen.


Was ist "Minibeispiel????

Reicht das aus dem hiesigen Beitrag Nummer 3 nicht???

Dann doch wohl besser die gesamte Unit MosConfig.pas aus Mos.zip. Die dann so zurückändern dass das Feld Soundlib wieder eine Eigenschaft wird, die die Get und Set Methode benutzt, das noch dazu mit Lazarus 1.2.6

Anders kann ich kein "Minibeispiel" hier anbringen, das in Beitrag 3 wird nicht als solches anerkannt!!!

Mathias
Beiträge: 6193
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Methodendefinition ungleich Deklaration???

Beitrag von Mathias »

Code: Alles auswählen

program Project1;
 
type
  TFileNameArray = array[0..100] of ShortString;
 
  TSystem = class
  public
    property SoundFile[Index: integer]: ShortString  // Hier Cursor
  end;
 
begin
end.

Ctr-Shift-C

Code: Alles auswählen

program Project1;
 
type
  TFileNameArray = array[0..100] of ShortString;
 
  { TSystem }
 
  TSystem = class
  private
    function GetSoundFile(Index: integer): ShortString;
    procedure SetSoundFile(Index: integer; AValue: ShortString);
  public
    property SoundFile[Index: integer]: ShortString read GetSoundFile write SetSoundFile;
  end;
 
{ TSystem }
 
function TSystem.GetSoundFile(Index: integer): ShortString;
begin
 
end;
 
procedure TSystem.SetSoundFile(Index: integer; AValue: ShortString);
begin
 
end;
 
begin
end.


Wird bei mir ohne Fehler kompiliert.

Du hast wahrscheinlich mit Lazarus 1.6 getestet, ich habe den Fehler aber bei der Vorgängerversion 1.2.6. Sorry for that.

Ich denke, das alte Lazarus hatte dazumal diesen Bug, der unterdessen behoben ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

fpGUIcoder
Beiträge: 199
Registriert: Di 20. Okt 2015, 23:13

Re: Methodendefinition ungleich Deklaration???

Beitrag von fpGUIcoder »

Mathias hat geschrieben:Ich denke, das alte Lazarus hatte dazumal diesen Bug, der unterdessen behoben ist.


Ich habe das mit Lazarus 1.2.6 gemacht. Muss das mal mit der 1.6-er Version testen.

Mathias
Beiträge: 6193
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Methodendefinition ungleich Deklaration???

Beitrag von Mathias »

Das würde ich dir empfehlen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

fpGUIcoder
Beiträge: 199
Registriert: Di 20. Okt 2015, 23:13

Re: Methodendefinition ungleich Deklaration???

Beitrag von fpGUIcoder »

Ja, mit Lazarus 1.6 und Freepascal 3.0.0 besteht dieses Problem nicht mehr, da wurde der genannte Fehler beseitigt!

Gut so!

marcov
Beiträge: 1100
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: Methodendefinition ungleich Deklaration???

Beitrag von marcov »

fpGUIcoder hat geschrieben:Du hast wahrscheinlich mit Lazarus 1.6 getestet, ich habe den Fehler aber bei der Vorgängerversion 1.2.6.


1.7/FPC3.1.1 also trunk/trunk

fpGUIcoder
Beiträge: 199
Registriert: Di 20. Okt 2015, 23:13

Re: Methodendefinition ungleich Deklaration???

Beitrag von fpGUIcoder »

marcov hat geschrieben:
fpGUIcoder hat geschrieben:Du hast wahrscheinlich mit Lazarus 1.6 getestet, ich habe den Fehler aber bei der Vorgängerversion 1.2.6.


1.7/FPC3.1.1 also trunk/trunk


Werde dieses Update an mir vorüber ziehen lassen.

Habe die Schnauze voll von den Inkompatibilitäten der Compilerversionen untereinander. Ich will zuerst einen 100% aufwärtskompatiblen Compiler. Bisher ist das nicht der Fall. Mit Version 3.0.0 konnte nich die Graphix nicht übersetzen, mit 2.6.4 hab ich es geschafft. Sollte ich die für Linux nicht mehr finden, tut es auch die 1.0.4 die ich für Linux noch auftreiben konnte, dann gebe ich zum Paket eben diese mit. Eventuelle angebliche Urheberrechte sollen mein Problem nicht sein. Begründung siehe Linux Thread "Verwöhnte Linux User". Das Einzige Mittel mich an solchem Tun zu hindern ist, entweder 2.6.4 für Linux noch bereit stellen oder völlig aufwärtskompatibler aktueller Compiler!

Die 16 Bit Unterstützung unter DOS kannste auch vergessen. Bibliotheken mit Assemblerteilen aud Turbo Pascal Zeiten werden mitnichten übersetzt. Als Speichermodell erwarte ich da als Standard das in Turbo Pascal verwendete. Andere MOdelle kann ich später immer noch einstellen, nach erfolgreicher Übersetzung.

Alten Ballast abwerfen haißt eben dann auch DOS konsequent raus, nur noch die anderen Plattformen anbiten das andere bis in die älteste Version runter vom Netz.

Oder die DOS Plattform auch bezüglich Grafik und GUI ordentlich unterstützen, wie das in C++ noch immer der Fall ist!

Ich mache das schneller höher weiter nicht mit, ist übrigens auch moralisch mehr als bedenklich dieser Wettbewerb, wer hat die neuste Software, wer hat den schnellsten Recner?.....

Im Kongo wird erbitterter Krieg um das begehrte Tantal geführt das dort abgebaut wird. Jetzt der Syrienkrieg und die damit verbundene Flüchtlingskriese. Um Ressourcen geht es in all diesen Kriegen. Ressourcen, damit das Schneller Höher Weiter Spiel witer gehen kann.

Sorry ich habe bereits für einen Krieg bezahlt, an dem ich nicht mal beteiligt war als 1958 geborener. Ich habe den II. Weltkrieg mit der Deutschen Teilung bezahlt, bin DDR Kind. Ich brauchge keinen Krieg, in dem eh nur die Rekruten ihre Knochen hinhalten damit die Herrn Generäle die dicke fette KOhle ansahnen können samt derjenigen Konzerne die sich um Absatzmärkte und Ressourcen streiten. Wer nicht mitmachen will bei diesem dreckigen Spiel wird abgeknallt wie ein Stück Vieh so war es doch im II. WK. Mit mir nicht. Ich mach da nicht mit, ich würd da eher die eigenen Leute abknallen die sind die wirklichen Feinde, die mich im Zweifelsfall in diesen Krieg zwingen, siehe 2. Weltkrieg. Der feige Führer konnte von seinem sicheren Bunker aus die Große Fresse haben. Aber die Leute draußen abknallen, wenn sie die Schnauze voill haben von diesem Betrug von diesem Raub von diesem Diebstahl auch an Urheberrrechten. Die eigenen Leute sind es die mich abknallen wenn ich desertiere weil ich das Spiel nicht mitmachen will. Die sind die wirklichen Feinde. Nicht die Einwohner all der fremden Länder.

Lieber nutze ich denn auch meinen Altrechner solange es nur irgend geht. Die Killer Applikation, die mich motiviert, den neuen Rechner zu kaufen, obwohl der alte noch mmer funktioniert, ist noch nicht geschrieben worden. Wegen immer langsamer werdender internetseiten wegen FlashPlayer der immer mehr Ressourcen fordert, wechsle ich den Rechner nicht. Da kann ich eben auf diesem keine Videos mehr schauen, obwohl das schon mal sehr gut ging 8im Jahr 2000 mit dem damaligen Flash Player. Nein ich mache diesen Wettlauf nicht mit!!!! Ich habe noch andere Hobbies und brauche mein Geld für selbige.

Die Sache mit dem Ressourcenkrieg habe ich bewusst angesprochen, weil sie wohl so mancher der auf Linux und oder Open Source ist, für einen besseren Menschen hält. Dann aber bitte auch ohne Ressourcenkriege und damit auch ohne den Wettlauf um die neuste Softwareversion oder die neuste Haredware.

Mit meiner nachhaltigeren Anwendung noch funktionierender, wenn auch veralteter Hardware kann ich einen kleinen Beitrag leisten, dafür, dass nicht so schnell wieder neue Ressourcen benötigt werden, denn auch mein neuer Rechner muss gebaut werden, auch der braucht Tantal für seine Elkos, braucht Rohstoffe um die erbitterte Kriege geführt werden. Da zählt dann kein Moral, nicht mal irgendwelche Urheberrechte wegen propertiärer Quellcodezeilen in OpenSource Projekten interessieren in solchen Kriegen irgendjemanden. Die Moral gilt nur für den Enverbraucher!

Und da bin ich wieder bei Linux bei Knoppix, bei der aufwendigen 3D Animation die die neuste Rechnergeneration zu ihrer Ausfüührung fordert und natürlich auch noch standardmäßig eingeschaltet ist, statt dieses Gimmick nur auf dafür wirklich tauglicher Harware einzuschalten oder das vom Anwender vornehmen zu lassen, kann man ja ausführlich und verständlich dokumentieren! Aber das gehört dann eher in den Linux Strang!

Auch das trüge zur Ressourcenschonung bei. Die paar Fenster für die Anwendung(en) brauchen, wie schon an anderer Stelle gesagt, nicht sooo viel Power. Auch Windows braucht so viel Speicher, nicht wegen der GUI an sich, sondern wegen der vielen Hintergrundprozesse, äquivalent zu Linux wo ja auch vieles im Hintergrund läuft.

shokwave
Beiträge: 470
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: Methodendefinition ungleich Deklaration???

Beitrag von shokwave »

marcov hat geschrieben:longint oder shortstring redeclariert ?


Ich glaube Marco meinte so etwas wie das hier, in Zeile 569 der MosConfig.pas

Code: Alles auswählen

Type
...
 
   ShortString=String[12];              {*String 12 = Short filename*}
 
mfg Ingo

Mathias
Beiträge: 6193
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Methodendefinition ungleich Deklaration???

Beitrag von Mathias »

Das würde ich wen möglich umgehen, da ShortString für alte Pascal-Strings reserviert ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten