Methodendefinition ungleich Deklaration???
-
- Beiträge: 199
- Registriert: Di 20. Okt 2015, 23:13
Methodendefinition ungleich Deklaration???
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.
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.
-
- 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: Methodendefinition ungleich Deklaration???
longint oder shortstring redeclariert ?
-
- Beiträge: 199
- Registriert: Di 20. Okt 2015, 23:13
Re: Methodendefinition ungleich Deklaration???
Es handelt sich um eine Arrayeigenschaft. Die einzelnen Elemente haben den Typ Shortstring. Longint steht für die Indexvariable.marcov hat geschrieben:longint oder shortstring redeclariert ?
Code: Alles auswählen
TFileNameArray = array[0..max] of ShortString;
TSystem = class
...
FSoundFile: TFileNameArray;
[b]
function GetSoundFile(Index: Integer): ShortString;
procedure SetSoundFile(Index: Integer; AValue: ShortString);[/b]
public
property SoundFile[Index: Integer]: ShortString read [b]GetSoundFile[/b] write [b]SetSoundFile[/b];
-
- 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: Methodendefinition ungleich Deklaration???
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.
-
- Beiträge: 199
- Registriert: Di 20. Okt 2015, 23:13
Re: Methodendefinition ungleich Deklaration???
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.
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.
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2808
- 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???
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
-
- Beiträge: 199
- Registriert: Di 20. Okt 2015, 23:13
Re: Methodendefinition ungleich Deklaration???
Was ist "Minibeispiel????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.
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!!!
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Methodendefinition ungleich Deklaration???
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.
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.
Ich denke, das alte Lazarus hatte dazumal diesen Bug, der unterdessen behoben ist.Du hast wahrscheinlich mit Lazarus 1.6 getestet, ich habe den Fehler aber bei der Vorgängerversion 1.2.6. Sorry for that.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 199
- Registriert: Di 20. Okt 2015, 23:13
Re: Methodendefinition ungleich Deklaration???
Ich habe das mit Lazarus 1.2.6 gemacht. Muss das mal mit der 1.6-er Version testen.Mathias hat geschrieben: Ich denke, das alte Lazarus hatte dazumal diesen Bug, der unterdessen behoben ist.
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Methodendefinition ungleich Deklaration???
Das würde ich dir empfehlen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 199
- Registriert: Di 20. Okt 2015, 23:13
Re: Methodendefinition ungleich Deklaration???
Ja, mit Lazarus 1.6 und Freepascal 3.0.0 besteht dieses Problem nicht mehr, da wurde der genannte Fehler beseitigt!
Gut so!
Gut so!
-
- 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: Methodendefinition ungleich Deklaration???
1.7/FPC3.1.1 also trunk/trunkfpGUIcoder hat geschrieben: Du hast wahrscheinlich mit Lazarus 1.6 getestet, ich habe den Fehler aber bei der Vorgängerversion 1.2.6.
-
- Beiträge: 199
- Registriert: Di 20. Okt 2015, 23:13
Re: Methodendefinition ungleich Deklaration???
Werde dieses Update an mir vorüber ziehen lassen.marcov hat geschrieben:1.7/FPC3.1.1 also trunk/trunkfpGUIcoder hat geschrieben: Du hast wahrscheinlich mit Lazarus 1.6 getestet, ich habe den Fehler aber bei der Vorgängerversion 1.2.6.
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.
-
- 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: Methodendefinition ungleich Deklaration???
Ich glaube Marco meinte so etwas wie das hier, in Zeile 569 der MosConfig.pasmarcov hat geschrieben:longint oder shortstring redeclariert ?
Code: Alles auswählen
Type
...
ShortString=String[12]; {*String 12 = Short filename*}
mfg Ingo
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Methodendefinition ungleich Deklaration???
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
Mit Java und C/C++ sehe ich rot