![]() |
Dyn Array in der Klasse ...
Die Klasse sol eine anzahl von Usern menagern...
dazu wird ein dyn Array verwendet...
Delphi-Quellcode:
jedoch beim erzeugen eines neuen eintrags im array kommt ein Speicherzugrifsfehler...
Tusers = class(Tobject)
protected users : array of Tuser; public constructor Create(Chuwak : Tuser); function Getbighash():Tuser; // Findet die Groste Hash function Getindex(chuwak : Tuser): integer; // Bekommt als Argument einen Sockethandle und liefer seinen Index im Usersarray zuruck
Delphi-Quellcode:
constructor Tusers.Create(Chuwak : Tuser);
var i, n : integer; begin inherited Create; setlength(users, high(users) + 1); users[high(users)] := Chuwak; end; // Create was ist falsh......!? |
Re: Dyn Array in der Klasse ...
hi,
versuch doch mal length statt high Grüsse Woki |
Re: Dyn Array in der Klasse ...
Zitat:
Delphi-Quellcode:
setlength(users, Length(users) + SizeOf(Tuser));
|
Re: Dyn Array in der Klasse ...
Delphi-Quellcode:
erst "length", da dyn. array bei 0 beginnt
setlength(users, length(users) + 1);
users[high(users)] := Chuwak; "+1" weil nur 1 Objekt vom Typ TUser hinzugefügt wird (soz. "1 index mehr" im dyn. array) dann "high", um den letzten index zu besetzen Gruß Stephan edit: tiffpehler |
Re: Dyn Array in der Klasse ...
Hallo,
du musst, wenn du ein Element in einem dyn. Array hinzufügen willst so schreiben:
Delphi-Quellcode:
MfG
Setlength(users, High(users) + 2);
Stefan |
Re: Dyn Array in der Klasse ...
Bei dyn. Array ist High + 1 = Length.. ich finde "Length+1" aber verständlicher als "High+2", aber das ist Geschmackssache :)
Gruß Stephan |
Re: Dyn Array in der Klasse ...
Liste der Anhänge anzeigen (Anzahl: 1)
Moment mal. Jedes mal wenn du eine neue Instanz von TUsers erstellst, ist das TUser Array logischerweise leer. Das heißt du hast pro Instanz nur einen User in deinem Array. Aber das willst du doch gar nicht. Du musst dir eine Methode Add oder so schreiben, die das macht, was bisher in deinem Konstruktor steht.
Im Anhang mal eine Demo Unit, wie ich denke dass du es haben willst. Kommst du damit zurecht oder brauchst du das ganze Projekt? |
Re: Dyn Array in der Klasse ...
ich habe das davor probiert...
Delphi-Quellcode:
an del line
constructor Tusers.Create(Chuwak : Tuser);
var i, n : integer; begin inherited Create; setlength(users, length(users) + 1); users[high(users)-1] := Chuwak; end; // Create
Delphi-Quellcode:
liefert er eine EAccessViolation ...
setlength(users, length(users) + 1);
|
DP-Maintenance
Dieses Thema wurde von "Luckie" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Konkretes Sprachproblem. ;) |
Re: Dyn Array in der Klasse ...
das ist fast die Gesammte unit....
Delphi-Quellcode:
so wird auf die Classe von anderer Unit zugegriffen...
unit Users_Clas;
interface uses classes, sysutils, Protokol_Unit, VirtualTrees ; type //Class der Userdaten Tusers = class(Tobject) protected users : array of Tuser; public constructor Create(Chuwak : Tuser); Procedure Adduser(Chuwak : Tuser); // Fugt einen User hinzu Procedure DelUser(Chuwak : Tuser); // loscht einen User function Getbighash():Tuser; // Findet die Groste Hash function Getindex(chuwak : Tuser): integer; // Bekommt als Argument einen Sockethandle und liefer seinen Index im Usersarray zuruck // Procedure SetServerOnVST(Chuwak : Tuser); // Setzt einen neuen user als Server in UsersOnlineVST // Procedure SetClientOnVST(Chuwak : Tuser); // Setz einen neuen Client im UsersOnlineVST end; implementation constructor Tusers.Create(Chuwak : Tuser); var i, n : integer; begin inherited Create; end; // Create //Die procedure die einen neuen User hinzufugt procedure Tusers.Adduser(Chuwak : Tuser); var i, n : integer; begin setlength(users, length(users) + 1); users[high(users)] := Chuwak; end;
Delphi-Quellcode:
Leider ohne Erfolg..
users.Adduser(temp);
Wegen der Verständnis, hier die Struktur Tuser
Delphi-Quellcode:
Wenn es dir nichts ausmacht poste bitte das ganze Project...:))
type
Tuser = record name : string[30]; s_handle : integer; ip : string[16]; desc : string[150]; Hash : string[30]; img_index: integer; status : boolean; //Wenn user Disconnected dann = FAlSE Wenn connected dann TRUE Server : boolean; //Wenn True dann soll der neue User die Afgaben des Servers uernehnen end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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