arrayofTStringList by reference setlength gibt type mismatch

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
slai
Beiträge: 211
Registriert: Fr 27. Apr 2007, 17:36
Wohnort: Zürich
Kontaktdaten:

arrayofTStringList by reference setlength gibt type mismatch

Beitrag von slai »

Hallo zusammen

Folgendes Problem, Objekte werden ja in der Regel by reference den funktionen oder proceduren übergeben.
Nun habe ich ein array of TStringList das ich einer function übergebe und diese in dieser funktion bearbeiten möchte.

Dies sollte meiner meinung nach gehen also z.b.

Code: Alles auswählen

//funktionsaufruf
machwas(MeineArrayOfStringList);
//Nach dem aufruf irgendwelche ausgaben anhand der daten in MeineArrayOfStringList die ja jetzt bearbeitet ist.
 
//funktion
function machwas(sl : array of TStringList):boolean;
begin
 //Diese Zeile gibt ein compile error --> unit1.pas(22,44) Error: Type mismatch
  setlength(sl,length(sl)+1)
 
 //Hier irgendwelche weitere bearbeitungsschritte
 
 result := true;
end;
Nun ist dies ja ein array werden diese auch by reference übergeben? habe es auch schon mit dem out parameter versucht
ging auch nicht.

Kennt jemand eine Lösung dazu?
Windows 7, Lazarus 0.9.28.2 fpc 2.2.4, Firebird 2.1, Zeoslib 6.6.6-stable

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: TStringList by reference setlength gibt type mismatch

Beitrag von monta »

Du willst das ganze als Variable übergeben?

dann:

Code: Alles auswählen

function machwas (var sl: array of TStringlist): boolean;
//...
so wie du es oben hast wird eine Kopie übergeben. Mit var davor wird direkt das Objekt übergeben und die Funktion arbeitet direkt in deinen übergebenen Variablen und mit const davor wird ein Ändern verhindert.
Johannes

slai
Beiträge: 211
Registriert: Fr 27. Apr 2007, 17:36
Wohnort: Zürich
Kontaktdaten:

Re: arrayofTStringList by reference setlength gibt type mismatch

Beitrag von slai »

Hallo monta

Danke für deine Antwort, habe mal die Signatur der Funktion geändert mit dem var vorn dran, kommt jedoch immer noch der selbe Error bei setLength()

[Edit]:

Was villeicht noch zu sagen ist, ist das die funktion in einer anderen unit deklariert ist, und nicht in einem Objekt ist. also "public static".

[Edit]:
Habe hier noch ein Beispielprojekt, das man sieht was ich genau meine.
Dateianhänge
test.zip
(3.19 KiB) 62-mal heruntergeladen
Windows 7, Lazarus 0.9.28.2 fpc 2.2.4, Firebird 2.1, Zeoslib 6.6.6-stable

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: arrayofTStringList by reference setlength gibt type mismatch

Beitrag von theo »

Schon mal mit einer anständigen Typdeklaration probiert?

Code: Alles auswählen

type
TSlArr=array of TStringlist;
....
function machwas (var sl: TSlArr): boolean;

slai
Beiträge: 211
Registriert: Fr 27. Apr 2007, 17:36
Wohnort: Zürich
Kontaktdaten:

Re: arrayofTStringList by reference setlength gibt type mismatch

Beitrag von slai »

Hallo theo, geht auch nicht, versuch mal mein demoprogramm

[Edit]
Sry, natürlich gehts :-) man sollte halt nicht zu später stunde noch etwas ausprobieren :-)

Danke euch!
Windows 7, Lazarus 0.9.28.2 fpc 2.2.4, Firebird 2.1, Zeoslib 6.6.6-stable

Antworten