2009-10-29 22 views
6

Ich versuche, ein Array einer bestimmten Klasse Größe als Argument übergeben, z.Delphi: SetLength() auf Argument vom Typ "Array von TObject"

procedure Resize(MyArray: Array of TObject); 
begin 
    SetLength(MyArray, 100); 
end; 

Dies führt jedoch zu einem Fehler "E2008 Inkompatible Typen". Stimmt es, dass Sie das nicht tun können (ich habe Gerüchte gesehen, aber keine offizielle Dokumentation) oder mache ich etwas falsch?

Antwort

10

Sie haben den Typ nicht explizit definiert. Daher hat der Compiler Probleme, ihnen zu entsprechen. Wenn Sie die Art, wie definieren:

type 
    TObjectArray = array of TObject; 

Es besteht kein Zweifel darüber, und (dank mghie) sollten Sie einen var-Parameter verwenden, weil resising verursachen wahrscheinlich eine Änderung der Zeiger.

procedure Resize(var MyArray: TObjectArray); 
begin 
    SetLength(MyArray, 100); 
end; 
+3

Sollte ein Var-Parameter sein? – mghie

+0

Guter Punkt. Korrigiert es. –

+0

Diese Antwort vermisst den Schlüsselpunkt, der den Unterschied zwischen offenen Arrays und dyanischen Arrays darstellt. –

9

Sie mischen offene Arrays (der Parameter von Resize) und dynamischen Arrays (was für SetLength erwartet). Eine Erläuterung finden Sie unter here - insbesondere der Teil mit dem Titel "Confusion".

+0

Danke Gerhardt. Ich lerne immer noch dieses Zeug. :) – conciliator

Verwandte Themen