Klassen erstellen

vralfy

Grünschnabel
Ja ich habe da mal nen Problem.Ich versuche ne Klasse zu erstellen was zaw soweit klappt, beim kompilen aber eine EAccessViolation verursacht.
------------------------------------------------------
type Tcrusher=class(Tobject) //habs auch ohne (Tobject) probiert
private
pVertices:Array of LINEVERTEX;
public
procedure Test();
end;

implementation

procedure Tcrusher.Test();
begin
setlength(pVertices,20);
end;
------------------------------------------------------
mach ich die procedure leer kommt irgendwie kein fehler. aber ich kann mir nicht denken das das an dem setlength liegt. in meinem Programm habe ich auch

var Testi:Tcrusher;

aber Testi.Create geht auch net.
 

Dario Linsky

Erfahrenes Mitglied
Hi,

ich hab zwar so auf die Schnelle auch keine Lösung, aber versuch doch einfach mal schrittweise das Problem einzugrenzen.
Wenn es ohne die SetLength-Funktion läuft, wird es vermutlich daran liegen. Als nächsten Schritt würde ich Dir einfach mal empfehlen, den Datentyp des Arrays zu ändern. Nimm einfach mal ein Integer oder einen String und probier es damit aus.
Oder probier Alternativen aus:
Muss das Array ein Member sein oder reicht auch eine lokale Variable?
Muss das Array dynamisch sein?
Muss es überhaupt ein Array sein oder kannst Du auch ein TList verwenden?

Gruss, Dario

PS: Bei der Klassendeklaration das TObject wegzulassen, macht keinen Unterschied - das wird vom Compiler so oder so angehängt, wenn kein Vorfahrtyp angegeben ist. ;)
 

vralfy

Grünschnabel
Original geschrieben von Dario Linsky
Hi,

ich hab zwar so auf die Schnelle auch keine Lösung, aber versuch doch einfach mal schrittweise das Problem einzugrenzen.
Wenn es ohne die SetLength-Funktion läuft, wird es vermutlich daran liegen. Als nächsten Schritt würde ich Dir einfach mal empfehlen, den Datentyp des Arrays zu ändern. Nimm einfach mal ein Integer oder einen String und probier es damit aus.
Oder probier Alternativen aus:
Muss das Array ein Member sein oder reicht auch eine lokale Variable?
Muss das Array dynamisch sein?
Muss es überhaupt ein Array sein oder kannst Du auch ein TList verwenden?

Gruss, Dario

PS: Bei der Klassendeklaration das TObject wegzulassen, macht keinen Unterschied - das wird vom Compiler so oder so angehängt, wenn kein Vorfahrtyp angegeben ist. ;)

egal was fuer eine Anweisung, es ist ein Fehler.
Datentypänderung bringt nichts
Das array sollte member sein (sonst wäre das wofür ich das mache sinnlos :))
Das array muss leider dynamisch sein un TList geht nicht weil ich in die DirectX-Funktion ein array übergeben muss
 

Schattenläufer

Grünschnabel
Öhm ....
Erst mal Hallo.
Bin neu auf dem Board.

Weiss ja nicht, ob ich dir jetzt zu nahe Trete, aber ist . ggfs. das Insntanziieren selber dein Problem ?

Wenn, du nun nicht zu viel Raus geschnitten hast, hast du noch keine Klassendistanz erzeugt. Das passiert bei Tobject nicht Automatisch.

Testi.create schlägt dann Natürlich fehl ... weil Testi nil ist.

Wäre Dann

Testi := Tcrusher.create ; // Instanzerzeugen
Testi.test; // erst dann ist die Var referenziert.

Ansostens kriegst du ne Acessviolation, wei Du auf ein nicht vorhandenens Object zugreifts.


Gruseln ...