Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dyn Array in der Klasse ... (https://www.delphipraxis.net/26664-dyn-array-der-klasse.html)

m0sch3r 27. Jul 2004 11:04


Dyn Array in der Klasse ...
 
Die Klasse sol eine anzahl von Usern menagern...
dazu wird ein dyn Array verwendet...

Delphi-Quellcode:
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
jedoch beim erzeugen eines neuen eintrags im array kommt ein Speicherzugrifsfehler...

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......!?

woki 27. Jul 2004 11:22

Re: Dyn Array in der Klasse ...
 
hi,

versuch doch mal length statt high

Grüsse
Woki

Sharky 27. Jul 2004 11:27

Re: Dyn Array in der Klasse ...
 
Zitat:

Zitat von woki
...versuch doch mal length statt high...

Und müsste es nicht so sein:?
Delphi-Quellcode:
setlength(users, Length(users) + SizeOf(Tuser));

Steve 27. Jul 2004 11:30

Re: Dyn Array in der Klasse ...
 
Delphi-Quellcode:
setlength(users, length(users) + 1);
users[high(users)] := Chuwak;
erst "length", da dyn. array bei 0 beginnt
"+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

cfmx 27. Jul 2004 11:31

Re: Dyn Array in der Klasse ...
 
Hallo,

du musst, wenn du ein Element in einem dyn. Array hinzufügen willst so schreiben:

Delphi-Quellcode:
Setlength(users, High(users) + 2);
MfG
Stefan

Steve 27. Jul 2004 11:32

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

Luckie 27. Jul 2004 11:59

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?

m0sch3r 27. Jul 2004 12:00

Re: Dyn Array in der Klasse ...
 
ich habe das davor probiert...
Delphi-Quellcode:
constructor Tusers.Create(Chuwak : Tuser);
var
   i, n : integer;
begin
    inherited Create;
    setlength(users, length(users) + 1);
    users[high(users)-1] := Chuwak;

end; // Create
an del line
Delphi-Quellcode:
  setlength(users, length(users) + 1);
liefert er eine EAccessViolation ...

DP-Maintenance 27. Jul 2004 12:04

DP-Maintenance
 
Dieses Thema wurde von "Luckie" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Konkretes Sprachproblem. ;)

m0sch3r 27. Jul 2004 12:43

Re: Dyn Array in der Klasse ...
 
das ist fast die Gesammte unit....
Delphi-Quellcode:
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;
so wird auf die Classe von anderer Unit zugegriffen...
Delphi-Quellcode:
  users.Adduser(temp);
Leider ohne Erfolg..

Wegen der Verständnis, hier die Struktur Tuser
Delphi-Quellcode:
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;
Wenn es dir nichts ausmacht poste bitte das ganze Project...:))


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz