Entwickler-Ecke
Sonstiges (Delphi) - Operandentyp nicht anwendbar: Einfache Rechnung?
SignsOfCore - Di 25.11.08 22:23
Titel: Operandentyp nicht anwendbar: Einfache Rechnung?
Huhu,
ja ich mal wieder :P
So, also folgendes Problem:
Bei dem Script kann man Lose kaufen und bei jedem Kauf soll 5 Geld abgezogen werden. Das klappt aber nicht so ganz :/
Variablen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var Form1: TForm1; x : Integer; Geld : Integer = 500; Los : Integer; Gewinn : Integer; |
Auszug aus dem Problemscript:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure TForm1.loskaufClick(Sender: TObject); begin randomize; Los := random(100) + 1; Geld := Geld - 5;
if Los = 6 then gewinnlos.Caption := 'Glückwunsch! Du hast 30€ gewonnen'; gewinnlos.Visible := true; Gewinn := 30;
if Los = 30 then gewinnlos.Caption := 'Glückwunsch! Du hast 20€ gewonnen'; gewinnlos.Visible := true;
if Los = 74 then gewinnlos.Caption := 'Glückwunsch! Du hast 20€ gewonnen'; gewinnlos.Visible := true;
if Los = 52 then gewinnlos.Caption := 'Glückwunsch! Du hast 50€ gewonnen'; gewinnlos.Visible := true;
if Los = 95 then gewinnlos.Caption := 'Glückwunsch! Du hast 10€ gewonnen'; gewinnlos.Visible := true;
if Los = 15 then gewinnlos.Caption := 'Jackpot!! 500 €! Herzlichen Glückwunsch!'; gewinnlos.Visible := true;
end;
end. |
Nun kommt aber folgender Fehler: Operator ist auf diesen Operandentyp nicht anwendbar.
Gruß
Core
JayEff - Di 25.11.08 22:38
Spontan fällt mir da ein anderer Fehler auf:
Delphi-Quelltext
1: 2: 3: 4:
| if Los = 6 then gewinnlos.Caption := 'Glückwunsch! Du hast 30€ gewonnen'; gewinnlos.Visible := true; Gewinn := 30; |
Du weißt, dass alle Zeilen ausser der Eingerückten Zeile bedingungslos ausgeführt werden? ;) Dir fehlen Begin-End blocks:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| if Los = 6 then begin gewinnlos.Caption := 'Glückwunsch! Du hast 30€ gewonnen'; gewinnlos.Visible := true; Gewinn := 30; end; |
Aber in der markierten Zeile kommt Operator auf diesem Operandentyp nicht anwendbar? Hmm... :gruebel:
Boldar - Di 25.11.08 22:40
Aus dem Codeteil ist für mich erstmal kein Fehler ersichtlich, vielleicht liegt der Fehler woanders?
Aber versuch mal
stattdessen.
freak4fun - Di 25.11.08 22:46
Das "gewinnlos.Visible := true;" ist auch jedes mal drin, also redundant.
Boldar - Mi 26.11.08 16:14
lade doch vielleicht mal alle Dateien (außer der exe) hoch, dann kann ichs mal testen.
Marc. - Mi 26.11.08 17:49
Hat es einen Grund, weshalb du deine Variable so und nicht anders initialisierst? :gruebel:
SignsOfCore - Mi 26.11.08 20:32
klappt leider auch nicht. "Inkompatible Typen"...
Boldar hochladen möchte ist es noch nicht, tut mir Leid. Die Codeschnipsel müssen reichen ;)
Sonst noch einer eine Idee?
jaenicke - Mi 26.11.08 20:37
Klar ist: Der Code ist so wie du ihn gepostet hast fehlerfrei kompilierbar. Der Fehler liegt woanders, ich vermute du hast die Variable Geld nochmal weiter oben in der Formulardeklaration als String oder so deklariert und da du dich innerhalb des Formulars befindest wird diese zuerst betrachtet.
SignsOfCore hat folgendes geschrieben : |
Boldar hochladen möchte ist es noch nicht, tut mir Leid. Die Codeschnipsel müssen reichen ;) |
Glaubst du wirklich, dass du etwas in deinem Code hast was irgendwie interessant für jemanden ist, der etwas besser Delphi kann? :lol:
JayEff - Mi 26.11.08 20:40
SignsOfCore hat folgendes geschrieben : |
Sonst noch einer eine Idee? |
Massig - die hängen alle vom Rest deines Codes ab, wie jaenicke gesagt hat. Wenn du den unbedingt geheim halten willst, aus welchen unerfindlichen Gründen auch immer, dann kann ich dir leider nicht helfen, meine Kristallkugel hab ich für Studiengebühren versetzen müssen :cry:
Edit @jaenicke: Jaaaaaah so hab ich das jetzt nicht formulieren wollen :lol:
SignsOfCore - Mi 26.11.08 21:35
Da habters :P
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172:
| unit fertig;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls;
type TForm1 = class(TForm) Image2: TImage; Image1: TImage; Image3: TImage; Image4: TImage; Timer1: TTimer; Button1: TButton; Button2: TButton; Button3: TButton; Geld: TLabel; roulette: TButton; stehlen: TButton; spielend: TButton; new: TButton; GroupBox1: TGroupBox; lose: TButton; Label1: TLabel; ueberschrift: TLabel; text: TLabel; text1: TLabel; text2: TLabel; text3: TLabel; text4: TLabel; loskauf: TButton; uebersicht: TButton; gewinnlos: TLabel; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure loseClick(Sender: TObject); procedure loskaufClick(Sender: TObject); private public end;
var Form1: TForm1; x : Integer; Geld : Integer = 500; Los : Integer; Gewinn : Integer; implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject); begin inc(x); case x of 1: begin Image1.Visible := true; end; 2: begin Image3.Visible := true; end; 3: begin Image4.Visible := true; end; 4: begin Label1.Visible := true; end; 5: begin Button3.Visible := true; Timer1.Enabled := false; end; end; end;
procedure TForm1.FormCreate(Sender: TObject); begin x:= Integer (0); end;
procedure TForm1.Button2Click(Sender: TObject); begin Timer1.Enabled := true; end;
procedure TForm1.Button3Click(Sender: TObject); begin Label1.Visible := false; Image1.Visible := false; Image3.Visible := false; Image4.Visible := false; Button3.Visible := false;
uebersicht.Visible := true; lose.Visible := true; GroupBox1.Visible := true; new.Visible := true; stehlen.Visible := true; roulette.Visible := true; spielend.Visible := true; Geld.Visible := true;
end;
procedure TForm1.loseClick(Sender: TObject); begin ueberschrift.caption := '>> Übersicht'; text.caption := 'Du hast Geld.' ; text1.caption := 'Und hast:' ; text2.caption := ' mal Lotto gespielt'; text2.caption := ' mal gestohlen'; text4.caption := ' mal Roulette gespielt...'; ueberschrift.visible := true; text.visible := true; text1.visible := true; text2.visible := true; text3.visible := true; text4.visible := true; loskauf.visible := true;
end;
procedure TForm1.loskaufClick(Sender: TObject); begin randomize; Los := random(100) + 1; dec (geld, 5);
if Los = 6 then gewinnlos.Caption := 'Glückwunsch! Du hast 30€ gewonnen'; gewinnlos.Visible := true; Gewinn := 30;
if Los = 30 then gewinnlos.Caption := 'Glückwunsch! Du hast 20€ gewonnen'; gewinnlos.Visible := true; Gewinn := 20;
if Los = 74 then gewinnlos.Caption := 'Glückwunsch! Du hast 20€ gewonnen'; gewinnlos.Visible := true; Gewinn := 20;
if Los = 52 then gewinnlos.Caption := 'Glückwunsch! Du hast 50€ gewonnen'; gewinnlos.Visible := true; Gewinn := 50;
if Los = 95 then gewinnlos.Caption := 'Glückwunsch! Du hast 10€ gewonnen'; gewinnlos.Visible := true; Gewinn := 10;
if Los = 15 then gewinnlos.Caption := 'Jackpot!! 500 €! Herzlichen Glückwunsch!'; gewinnlos.Visible := true; Gewinn := 500;
end;
end. |
Marc. - Mi 26.11.08 21:43
Und daran liegts. ;)
SignsOfCore hat folgendes geschrieben : |
Da habters :P
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| [...] type TForm1 = class(TForm) [...] Geld: TLabel; [...] private public end;
var Form1: TForm1; x : Integer; Geld : Integer = 500; Los : Integer; Gewinn : Integer; | |
Nenne eines von beidem um, um eindeutig auf das Label oder auf die Variable zuzugreifen. :zwinker:
Boldar - Mi 26.11.08 21:44
Naja, du hast Geld einmal als Tlabel definiert und einmal als integer, kein wunder das da was schief läuft.
Benenne das Lable einfach in Label_geld um...
Edith sagt: mist, zu spät...
Dunkel - Mi 26.11.08 21:46
Tja, wie schon vermutet wurde, hast Du Deine Integer-Variable genau wie ein TLabel genannt. TLabel wird in diesem Fall bevorzugt behandelt, und dekrementieren kann man ein Label halt nicht.
Gewöhn Dir an sogenannte Prefixe vor die Varaiblen- und Komponentennamen zu schreiben. In Deinem Fall würde sich für das TLabel z.B. lblGeld anbieten; das Prefix lbl steht dabei für Label (ohne Vokale halt). Und schon kann sowas nicht mehr so schnell passieren. Ausserdem ist so auf einem Blick sichtbar um was es sich bei der Variable handelt.
SignsOfCore - Do 27.11.08 14:38
Dankeschön! Klappt wunderbar nur hab ich jetzt noch eine Frage.
Delphi-Quelltext
1: 2: 3: 4: 5:
| if Los = 61 then begin Geld := Geld + 500; gewinnlos.Caption := 'Jackpot!! 500 €! Herzlichen Glückwunsch!'; end; |
Er schreibt zwar die 500 "Geld" gut, aber er ändert die Caption von "gewinnlos" nicht.
Wenn ich beide vertausche macht er immer das erste. Idee?
jaenicke - Do 27.11.08 14:42
Bist du sicher, dass du überall begin..end stehen hast? Vielleicht wird die Caption später einfach erneut geändert.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!