![]() |
Klassenchaos
Hallo,
kann mir jemand auf die Schnelle sagen, wo hier der Fehler liegt? :? Ich bekomme in TAlbum.GetSC immer vor dem Songs einen Fehler E2066 Operator oder Semikolon fehlt
Delphi-Quellcode:
:shock:
function TAlbum.GetSC: Integer;
begin result:=Length(<HIER>Songs); end; Bei allen anderen Klassen klappt alles; wenn ich Length(Songs) durch ein schlichte 0 ersetze, klappt es auch.
Delphi-Quellcode:
Ich bin vollkommen ratlos :(
unit U_Tools;
interface uses SysUtils, Classes, Links; // Parameters type TAlbumType = (atAlbum, atDoubleAlbum, atCompilation, atSingle, atEP, atBoxSet, atDisneyST, atMovieST, atMusicalST, atTVSeriesST, atVideoGameST); // Forward declarations TAlbum = class; TSong = class; // Classes TArtist = class Links: TLinks; Name: String; Albums: Array of TAlbum; Songs: Array of TSong; function GetAC: Integer; function GetSC: Integer; procedure AddAlbum(Album: TAlbum); procedure AddSong(Song: TSong); property AlbumCount: Integer read GetAC; property SongCount: Integer read GetSC; end; TAlbum = class Links: TLinks; Title: String; Year: String; Artist: TArtist; Songs: Array of TSong; AlbumType: TAlbumType; Length: Integer; Genre: String; function GetSC: Integer; procedure AddSong(Song: TSong); property SongCount: Integer read GetSC; end; TSong = class Links: TLinks; Title: String; Artist: TArtist; Albums: Array of TAlbum; function GetAC: Integer; procedure AddAlbum(Album: TAlbum); property AlbumCount: Integer read GetAC; end; function FLetterUC(Title: String): String; implementation function FLetterUC(Title: String): String; var a: Integer; NextLetterUC: Boolean; begin result:=''; NextLetterUC:=True; for a:=1 to Length(Title) do begin if NextLetterUC then result:=result+AnsiUpperCase(Title[a]) else result:=result+Title[a]; NextLetterUC:=((Title[a]=' ') or (Title[a]='(')); end; end; // ARTIST // function TArtist.GetAC: Integer; begin result:=Length(Albums); end; function TArtist.GetSC: Integer; begin result:=Length(Songs); end; procedure TArtist.AddAlbum(Album: TAlbum); begin SetLength(Albums,AlbumCount+1); Albums[AlbumCount-1]:=Album; end; procedure TArtist.AddSong(Song: TSong); begin SetLength(Songs,SongCount+1); Songs[SongCount-1]:=Song; end; // ALBUM // function TAlbum.GetSC: Integer; begin result:=Length(Songs); end; procedure TAlbum.AddSong(Song: TSong); begin SetLength(Songs,SongCount+1); Songs[SongCount-1]:=Song; end; // SONG // function TSong.GetAC: Integer; begin result:=Length(Albums); end; procedure TSong.AddAlbum(Album: TAlbum); begin SetLength(Albums,AlbumCount+1); Albums[AlbumCount-1]:=Album; end; end. |
AW: Klassenchaos
OMG ich habs gefunden :oops: Ich hab ein Attribut "Length" - und ich hab ehrlich 2 Stunden den Fehler gesucht deswegen :lol:
Nix für ungut. Sorry. |
AW: Klassenchaos
Für Andere, mit dem selben Problem.
Hier noch die unterschlagene Lösung: * entweder man bennent das gleichnamige Feld oder eine gleichnamige Funktion/Prozedur um, hier das
Delphi-Quellcode:
* oder man gibt einen Namespace mit an, also (das gewünschte "Length" liegt in der Unit System)
TAlbum = class
... Length: Integer;
Delphi-Quellcode:
function TAlbum.GetSC: Integer;
begin result := System.Length(Songs); end; |
AW: Klassenchaos
Alternativ kann man, was sich gerade bei der Eigenschaft "Length" anbietet, es auch als eine Property schreiben, die auf das private Feld FLength zugreift.
Jetzt ungetestet, aber das müsste auch gehen. MfG Fabian |
AW: Klassenchaos
ob nun ein direktes Feld "Length" oder ein Property "Length" ... in beiden Fällen wird das/die "Length" der Systemunit verdeckt :zwinker:
|
AW: Klassenchaos
Ach mist, ich dachte bei Read-Only Properties funktioniert es. Wobei eigentlich ergibt es eher andersherum nur Sinn. Naja gut alternativ schreibe "Size" :D
MfG Fabian |
AW: Klassenchaos
Da es bei mir um Zeiten geht, heißt es "Duration" ;) Klar, auf "System.Length" hätte ich auch kommen können :stupid:
|
AW: Klassenchaos
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 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 by Thomas Breitkreuz