Xearox - Sa 14.02.15 07:19
Titel: Die Typen der tatsächlichen und formalen Var-Parameter ....
Guten Morgen Zusammen,
ich versuche mich, wohl schon x-ten mal, an einem Kleinen Spiel :D
Nun bekomme ich beim Compilieren folgende Fehlermeldung: [DCC Fehler] game.pas(115): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
Was ich aber leider nicht ganz verstehe, ist mir irgendwie zu hoch, da ich functionen bisher immer verwendet habe und damit noch keinerlei Probleme hatte.
Hier einmal meine Function selbst
Delphi-Quelltext
1: 2: 3: 4:
| function TGameTickThread.NeuerRessStand(var AktuellerStand, GebAnzahl, RessMuliplikator : integer):integer; begin result := AktuellerStand + (GebAnzahl * RessMuliplikator); end; |
Die Function ist in der Klasse TGameTickThread angesiedelt. Welche so ausschaut.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type TGameTickThread = class(TThread) procedure Execute; override; procedure Ausgabe; private function NeuerRessStand(var AktuellerStand, GebAnzahl, RessMuliplikator : integer):integer; public end; |
Nun rufe ich innerhalb von Execute die function auf.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TGameTickThread.Execute; var I: Integer; begin try while not Terminated do begin Synchronize(Ausgabe); CompleteTicks := CompleteTicks + 1; for I := 0 to High(SpielerArray) - 1 do begin SpielerArray[i].HolzStand := NeuerRessStand(SpielerArray[i].HolzStand,2,50); SpielerArray[i].EisenStand := NeuerRessStand(SpielerArray[i].EisenStand,3,50); SpielerArray[i].NahrungStand := NeuerRessStand(SpielerArray[i].NahrungStand,4,50); SpielerArray[i].GoldStand := NeuerRessStand(SpielerArray[i].GoldStand,5,50); end; Sleep(1000); end; except on e: Exception do ShowMessage('Fehler aufgetreten'); end; end; |
Und aber hier funktioniert es nicht mehr, dort erhalte ich wie oben geschrieben, immer wieder die selber Fehlermeldung.
Rufe ich die Function nun selber auf, also einfach nur
RessourcenStand := NeuerRessStand(5000,20,200)
Kommt wieder die selbe Fehlermeldung, obwohl ich nur Integer Werte an die function übergebe. Mache ich da irgendwas falsch? Liegt das eventuell daran, das ich die function innerhalb eines Threads aufrufe?
OlafSt - Sa 14.02.15 10:29
Da der Compiler eine Fehlermeldung rauswirft, hast du natürlich was falsch gemacht. Und die Fehlermeldung zeigt auch deutlich, wo der Fehler liegt.
Die Deklaration von NeuerRessStand deklariert
alle drei Parameter als
var-Parameter. Also müssen auch drei variablen angegeben werden, wenn die Routine aufgerufen wird. die Zahlen 2,3,4,5 und 50 sind aber keine Variablen.
Ändere also die Deklaration von NeuerRessStand entsprechend ab oder übergebe Variablen. Da ich die nächste Frage schon kenne:
Delphi-Quelltext
1:
| function NeuerRessStand(var AktuellerStand: integer; GebAnzahl, RessMuliplikator : integer):integer; |
In der alten Form sind die Variablen alle hintereinander weg (durch das Komma), ergo alle
var. In der neuen Form wird diese Kette unterbrochen (durch das Semikolon).
Xearox - Sa 14.02.15 10:59
OlafSt hat folgendes geschrieben : |
Da der Compiler eine Fehlermeldung rauswirft, hast du natürlich was falsch gemacht. Und die Fehlermeldung zeigt auch deutlich, wo der Fehler liegt.
Die Deklaration von NeuerRessStand deklariert alle drei Parameter als var-Parameter. Also müssen auch drei variablen angegeben werden, wenn die Routine aufgerufen wird. die Zahlen 2,3,4,5 und 50 sind aber keine Variablen.
Ändere also die Deklaration von NeuerRessStand entsprechend ab oder übergebe Variablen. Da ich die nächste Frage schon kenne:
Delphi-Quelltext 1:
| function NeuerRessStand(var AktuellerStand: integer; GebAnzahl, RessMuliplikator : integer):integer; |
In der alten Form sind die Variablen alle hintereinander weg (durch das Komma), ergo alle var. In der neuen Form wird diese Kette unterbrochen (durch das Semikolon). |
Das sehe ich ja jetzt erst ... Jetzt wo du mich drauf hingewiesen hast...da ist mir ein VAR zwischen gerutscht ...
Alle anderen functionen hab ich so gemacht
Delphi-Quelltext
1:
| function TGameTickThread.NeuerRessStand(AktuellerStand, GebAnzahl, RessMuliplikator : integer):integer; |
Danke für deine Hilfe =)