AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dyn Array in der Klasse ...

Ein Thema von m0sch3r · begonnen am 27. Jul 2004 · letzter Beitrag vom 29. Jul 2004
Antwort Antwort
Seite 1 von 2  1 2      
m0sch3r

Registriert seit: 29. Mär 2004
121 Beiträge
 
Delphi 7 Enterprise
 
#1

Dyn Array in der Klasse ...

  Alt 27. Jul 2004, 12:04
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......!?
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#2

Re: Dyn Array in der Klasse ...

  Alt 27. Jul 2004, 12:22
hi,

versuch doch mal length statt high

Grüsse
Woki
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Dyn Array in der Klasse ...

  Alt 27. Jul 2004, 12:27
Zitat von woki:
...versuch doch mal length statt high...
Und müsste es nicht so sein
setlength(users, Length(users) + SizeOf(Tuser));
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#4

Re: Dyn Array in der Klasse ...

  Alt 27. Jul 2004, 12:30
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
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
cfmx

Registriert seit: 3. Dez 2003
Ort: Drachselsried
22 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Dyn Array in der Klasse ...

  Alt 27. Jul 2004, 12:31
Hallo,

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

Setlength(users, High(users) + 2); MfG
Stefan
Stefan Sturm
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#6

Re: Dyn Array in der Klasse ...

  Alt 27. Jul 2004, 12:32
Bei dyn. Array ist High + 1 = Length.. ich finde "Length+1" aber verständlicher als "High+2", aber das ist Geschmackssache

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Dyn Array in der Klasse ...

  Alt 27. Jul 2004, 12:59
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?
Angehängte Dateien
Dateityp: pas unit1_160.pas (1,8 KB, 4x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
m0sch3r

Registriert seit: 29. Mär 2004
121 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Dyn Array in der Klasse ...

  Alt 27. Jul 2004, 13:00
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
  setlength(users, length(users) + 1); liefert er eine EAccessViolation ...
  Mit Zitat antworten Zitat
27. Jul 2004, 13:04
Dieses Thema wurde von "Luckie" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Konkretes Sprachproblem.
m0sch3r

Registriert seit: 29. Mär 2004
121 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Dyn Array in der Klasse ...

  Alt 27. Jul 2004, 13:43
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...
  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...)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 Uhr.
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