Entwickler-Ecke
Sonstiges (Delphi) - Inkompatible Typen
Pandax3 - Do 10.03.11 20:06
Titel: Inkompatible Typen
Hallo, ich habe ein Problem ;D
ich weiß nicht was ich falsch mach aber ich bekomme immer diese Fehlermeldung (ich möchte 4 gewinnt programmieren):
wäre nett wenn jemand helfen könnte ;D
Quelltext
1: 2:
| [Fehler] Unit3.pas(93): Inkompatible Typen: 'String' und 'procedure, untyped pointer or untyped parameter' [Fehler] Unit3.pas(101): Inkompatible Typen: 'String' und 'procedure, untyped pointer or untyped parameter' |
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:
| procedure TForm3.Button3Click(Sender: TObject); var a,b,i,j:integer; begin
for i:=0 to 6 do for j:= 0 to 6 do if stringgrid1.Cells[i,j]=IntToStr(0) and if stringgrid1.Cells[i,j+1]=IntToStr(0) and if stringgrid1.Cells[i,j+2]=IntToStr(0) then stringgrid1.Cells[i,j+3]:=IntToStr(1) else
Repeat randomize; a:=random(6)+0; b:=random(6)+0; until stringgrid1.cells[a,b]=''; if stringgrid1.cells[a,6]='' then stringgrid1.cells[a,6]:=IntToStr(1) else if stringgrid1.cells[a,5]='' then stringgrid1.cells[a,5]:=IntToStr(1) else if stringgrid1.cells[a,4]='' then stringgrid1.cells[a,4]:=IntToStr(1) else if stringgrid1.cells[a,3]='' then stringgrid1.cells[a,3]:=IntToStr(1) else if stringgrid1.cells[a,2]='' then stringgrid1.cells[a,2]:=IntToStr(1) else if stringgrid1.cells[a,1]='' then stringgrid1.cells[a,1]:=IntToStr(1) else if stringgrid1.cells[a,0]='' then stringgrid1.cells[a,0]:=IntToStr(1);
Button1Click(Sender); end; |
Moderiert von
Martok: Delphi-Tags hinzugefügt
HenryHux - Do 10.03.11 20:21
Naja ich würde erstmal drauf tippen, dass die Zeilen hier falsch sind:
Delphi-Quelltext
1: 2:
| if stringgrid1.Cells[i,j]=IntToStr(0) and if stringgrid1.Cells[i,j+1]=IntToStr(0) and if stringgrid1.Cells[i,j+2]=IntToStr(0) then stringgrid1.Cells[i,j+3]:=IntToStr(1) else |
Versuchs mal mit
Delphi-Quelltext
1: 2:
| if (stringgrid1.Cells[i,j]=IntToStr(0)) and (stringgrid1.Cells[i,j+1]=IntToStr(0)) and (stringgrid1.Cells[i,j+2]=IntToStr(0)) then stringgrid1.Cells[i,j+3]:=IntToStr(1) else |
Lg
Pandax3 - Do 10.03.11 20:31
so danke erstmal ;D
die fehlermeldung ist weg , jetzt komm jedoch an der selben stelle eine neue:
[Fehler] Unit3.pas(93): Operator ist auf diesen Operandentyp nicht anwendbar
Pandax3 - Do 10.03.11 21:46
so habe den fehler behoben ;D
richtig ist :
Delphi-Quelltext
1: 2: 3: 4:
| for i:=0 to 6 do begin for j:= 0 to 6 do begin if ((stringgrid1.Cells[i,j]=IntToStr(0)) and (stringgrid1.Cells[i,j-1]=IntToStr(0)) and (stringgrid1.Cells[i,j-2]=IntToStr(0))) then (stringgrid1.Cells[i,j-3]:=IntToStr(1)); |
Allerdings habe ich noch eine Frage und zwar bekomm ich immer folgende Fehlermeldung:
'END' erwartet aber 'ELSE' gefunden
Was mach ich falsch? wäre nett wenn jemand helfen könnte :(
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:
| procedure TForm3.Button3Click(Sender: TObject); var a,b,i,j:integer; begin
for i:=0 to 6 do begin for j:= 0 to 6 do begin if ((stringgrid1.Cells[i,j]=IntToStr(0)) and (stringgrid1.Cells[i,j-1]=IntToStr(0)) and (stringgrid1.Cells[i,j-2]=IntToStr(0))) then (stringgrid1.Cells[i,j-3]:=IntToStr(1)); end; end
else
begin Repeat randomize; a:=random(6)+0; b:=random(6)+0; until stringgrid1.cells[a,b]='';
if stringgrid1.cells[a,6]='' then stringgrid1.cells[a,6]:=IntToStr(1) else if stringgrid1.cells[a,5]='' then stringgrid1.cells[a,5]:=IntToStr(1) else if stringgrid1.cells[a,4]='' then stringgrid1.cells[a,4]:=IntToStr(1) else if stringgrid1.cells[a,3]='' then stringgrid1.cells[a,3]:=IntToStr(1) else if stringgrid1.cells[a,2]='' then stringgrid1.cells[a,2]:=IntToStr(1) else if stringgrid1.cells[a,1]='' then stringgrid1.cells[a,1]:=IntToStr(1) else if stringgrid1.cells[a,0]='' then stringgrid1.cells[a,0]:=IntToStr(1);
end; Button1Click(Sender); end; |
Moderiert von
Martok: Delphi-Tags hinzugefügt
Pandax3 - Do 10.03.11 22:03
hm ja ok .
danke für die tipps ;D
allerdings versteh ich das immer noch nich ganz ;(
ich habe doch zu jedem Begin ein End gesetzt? Wo muss denn noch ein end hin?
elundril - Do 10.03.11 22:08
auf jeden fall nach dem else. Überleg dir mal von wo bis wo die for-schleifen gehen sollten (was alles drin abgearbeitet werden soll. und danach setzt du dann die end;
außerdem solltest du mal richtig den code einrücken, da erkennt man ja überhaupt nix. ;) Die Anleitung dafür findest du
hier [
http://www.delphi-treff.de/object-pascal/delphi-styleguide/].
lg elundril
Pandax3 - Fr 11.03.11 14:44
so jetzt funktionierts ;D
das mit den END's hat nicht ganz hingehauen habe das Problem jetzt andere gelöst.
Ich habe allerdings noch eine Frage und möchte kein neues Topic eröffnen daher stell ich sie hier:
Ist es möglich eine Procedure noch einmal von vorne aufzurufen?
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:
| procedure TForm3.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin
if stringgrid1.cells[acol,0]='' then begin if stringgrid1.cells[acol,c[acol]]=IntToStr(1) then repeat c[acol]:=c[acol]-1 until stringgrid1.cells[acol,c[acol]]=''; if stringgrid1.cells[acol,c[acol]]=IntToStr(0) then repeat c[acol]:=c[acol]-1 until stringgrid1.cells[acol,c[acol]]=''; stringgrid1.cells[acol,c[acol]]:=IntToStr(0); end else begin showmessage('Bitte werfen Sie den Stein in eine andere Reihe'); TForm3.StringGrid1SelectCell(Sender); end;
Button1Click(Sender); Button3Click(Sender);
end; |
Marc. - Fr 11.03.11 15:11
Delphi-Quelltext
1:
| stringgrid1.cells[acol,c[acol]]=IntToStr(1) |
Wofür zwei If-Abfragen, wenn auch eine reicht?
Delphi-Quelltext
1:
| if (stringgrid1.cells[acol,c[acol]] = '1') or ( if stringgrid1.cells[acol,c[acol]] = '0' then |
Mal abgesehen davon, dass deine Schleife in gewisser Hinsicht Nonsense ist...
Du könntest dir durch aus noch ein paar Gedanken zu deiner Code-Formatierung machen. Wie's besser geht, steht z.B. in dem
StyleGuide [
http://www.delphi-treff.de/object-pascal/delphi-styleguide/] auf Delphi-Treff.de
Pandax3 hat folgendes geschrieben : |
| Ist es möglich eine Procedure noch einmal von vorne aufzurufen? |
Meinst du, dass sich eine Funktion selbst wieder aufruft, also
rekursiv [
http://de.wikipedia.org/wiki/Rekursive_Programmierung]?
Meine Glaskugel ist gerade etwas trübe. Am besten erstellst du eine neues(!) Topic und erläuterst dein Problem etwas ausführlicher(!). :zustimm:
Pandax3 - Fr 11.03.11 15:28
ich würde nicht sagen das die schleife non-sense ist ;)
anders würde das programm nich laufen ;)
ja ich meine das die sich von selbst wieder aufruft ;D
dafür möcht ich jetzt aber kein neues topic erstellen ;) und hier alles zu spammen :D
Marc. - Fr 11.03.11 15:37
Pandax3 hat folgendes geschrieben : |
| ich würde nicht sagen das die schleife non-sense ist ;) |
Ich würde das Problem vermutlich anders lösen, aber beim schnellen Überfliegen habe c[] falsch interpretiert. Selbstverständlich finde ich deinen Code nicht - anyway. :roll:
Pandax3 hat folgendes geschrieben : |
ja ich meine das die sich von selbst wieder aufruft ;D
dafür möcht ich jetzt aber kein neues topic erstellen ;) und hier alles zu spammen :D |
Im Gegenteil. Dadurch das du hier nur zwei Themen mischst, haben später andere User mit den gleichen Problemen das Vergnügen die Antwort im Wirr von Fragen zu entdecken.
Wo ist das Problem ein Topic zu einer konkreten Frage zu eröffnen, sofern diese bisher noch nicht diskutiert wurde (Suche). :nixweiss:
Pandax3 - Fr 11.03.11 15:45
na gut wenn du meinst ;D dann kann das hier geschlossen werden :O
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!