![]() |
Operator is auf diesen Operandentyp nicht anwendbar
Bei im Betreff genannter Fehlermeldung spricht der Marker auf unten mit "[_]" markierte Stelle
Delphi-Quellcode:
Weiß jemand woran es liegen könnte? :\
type
TZeiger =^TSportler; TSportler = record name : string[50]; zeit : real; next : TZeiger; end; procedure TForm1.Loeschen1Click(Sender: TObject); var handle: string[50]; time: real; vor: TZeiger; begin handle:= StringGrid1.Cells[x, y]; time:= StrToFloat(StringGrid1.Cells[x+1, y]); sportler:= schnellster; while handle <> sportler^.name and sportler^.zeit <>[_] time // Fehlermeldung ... |
Re: Operator is auf diesen Operandentyp nicht anwendbar
Hi,
Du musst die einzelnen Bedingungen in Klammern setzen:
Delphi-Quellcode:
genauso halt auch bei while und repeat...
if (a = b) and (not c) then
In deinem Quelltext
Delphi-Quellcode:
denkt der Compiler du willst
sportler^.name and sportler^.zeit
sportler^.name AND sportler^.zeit rechnen, also diese beiden Werte miteinander verknüpfen. Und das funktioniert bei Strings eben nicht, weshalb angezeigt wird, das man das and nicht im Bezug auf Strings benutzen kann. Gruß Neutral General |
Re: Operator is auf diesen Operandentyp nicht anwendbar
..... danke
|
Re: Operator is auf diesen Operandentyp nicht anwendbar
Das AND wiegt stärker als das <>.
Daher muss man Klammern setzen. if (a <> b) AND (c <> d) then Siehe auch den Abschnitt "Operatoren" in der Delphi-Hilfe. |
Re: Operator is auf diesen Operandentyp nicht anwendbar
Nochmal ich... Kann mir jemand erklären, warum nach folgendem Quellcode einschließlich oben geschriebener Deklaration nichts im StringGrid ausgegeben wird??
Delphi-Quellcode:
procedure TForm1.FormActivate(Sender: TObject); var n: integer; begin vor:= nil; Schnellster:= nil; gespeichert:= false; with StringGrid1 do begin ColCount:= 3; RowCount:= 31; Cells[1, 0]:= 'Name'; Cells[2, 0]:= 'Zeit'; end; anzahl:= 0; for n:= 1 to 30 do StringGrid1.Cells[0, n]:= IntToStr(n); end; procedure TForm1.Einfuegen1Click(Sender: TObject); begin form2.show; ausgeben; end; procedure TForm1.Ausgeben; var yPos: integer; begin for yPos:= 1 to 30 do begin StringGrid1.Cells[1, yPos]:= ''; StringGrid1.Cells[2, yPos]:= ''; end; sportler:= schnellster; ypos:= 1; while sportler <> nil do begin StringGrid1.Cells[1, yPos]:= sportler^.name; StringGrid1.Cells[2, yPos]:= FloatToStr(sportler^.zeit); sportler:= sportler^.next; ypos:= ypos+1; end; end; procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin y:= ARow; end; procedure TForm1.Loeschen1Click(Sender: TObject); var handle: string[50]; time: real; begin handle:= StringGrid1.Cells[1, y]; time:= StrToFloat(StringGrid1.Cells[2, y]); sportler:= schnellster; while (handle <> sportler^.name) and (sportler^.zeit <> time) do begin vor:= sportler; sportler:= sportler^.next; end; vor^.next:= sportler^.next; dispose(sportler); ausgeben; end; procedure TForm2.EinfuegenClick(Sender: TObject); var neu: TZeiger; begin new(neu); neu^.name:= NameEd.Text; neu^.zeit:= StrToFloat(ZeitEd.Text); if schnellster = nil then schnellster:= neu else begin neu^.next:= schnellster; schnellster:= neu; end; gespeichert:= false; Form2.hide; end; |
Re: Operator is auf diesen Operandentyp nicht anwendbar
Tja, was klickst Du denn, wenn nichts ausgegeben wird?
|
Re: Operator is auf diesen Operandentyp nicht anwendbar
Liste der Anhänge anzeigen (Anzahl: 1)
den Einfügen-Button (im Anhang zu sehen)
Edit: Ich habe den Fehler vermutlich gefunden, allerdings tut sich ein neues Problem auf
Delphi-Quellcode:
Leider bekomme ich jetzt einen EAccessViolation Fehler an eben der Stelle, die mit // beschriftet ist
procedure TForm2.EinfuegenClick(Sender: TObject);
var neu: TZeiger; begin new(neu); neu^.name:= NameEd.Text; neu^.zeit:= StrToFloat(ZeitEd.Text); if schnellster = nil then schnellster:= neu else begin neu^.next:= schnellster; schnellster:= neu; end; gespeichert:= false; form1.ausgeben; // muss hier stehen und nich in Einfuegen1Click, da sonst nichts ausgegeben wird Form2.visible:= false; end; |
Re: Operator is auf diesen Operandentyp nicht anwendbar
Ich bin im Moment zu blau, um mir das im Einzelnen anzuschauen, aber lies mal hier:
![]() |
Re: Operator is auf diesen Operandentyp nicht anwendbar
Ich hab Zeigerverkettungen grundsätzlich drauf, ich knobel da jetzt schon recht lang dran und finde einfach nicht das Problem...
|
Re: Operator is auf diesen Operandentyp nicht anwendbar
Wie gesagt, heute nicht mehr, sry, da können Andere ran.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz