Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Frage zu Übergabe eines Arrays aus einer Unit in eine andere (https://www.delphipraxis.net/54870-frage-zu-uebergabe-eines-arrays-aus-einer-unit-eine-andere.html)

BingoBongo 12. Okt 2005 21:35


Frage zu Übergabe eines Arrays aus einer Unit in eine andere
 
Meine Frage bezieht sich auf ein Problem, welches ich mir nicht erklären kann.
Ich habe ein kleines Programm geschrieben, bei dem in einer separaten Unit verschiedene Funktionen ausgelagert sind, damit das ganze etwas übersichtlicher wird. Diese Unit habe ich auch korrekt im Hauptprogramm eingebunden und teilweise die enthaltenen Funktionen schon integriert.
Eine dieser Funktionen gibt ein Array of String zurück als Ergebnis und wenn ich diese Funktion dann in dem Hauptprogramm aufrufen will, vermeldet mir der Compiler die vielsagende Fehlermeldung "Inkompatible Typen".
Ich habe für dieses Array einen Datentyp in der separierten Unit deklariert, der einem Array of String entspricht, und im Hauptprogramm soll das ausgegebene Array dann weiterverwendet werden, was aber eben nicht funktionieren will. Mir gehen leider die Ideen aus, woran das noch liegen kann. Hat da jemand für mich vielleicht einen Rat? Quelltext wird bei Bedarf noch nachgeliefert.

Bingo

Eichhoernchen 12. Okt 2005 21:40

Re: Frage zu Übergabe eines Arrays aus einer Unit in eine an
 
hmm und du hast auch die Empfangsvariable mit dem gleichen Typ deklariert wie die Ergebnisvariable der funktion?

Hast du den typen vielleicht ausversehen 2 mal unterschiedlich definiert und benutzt den falschen?

Also Quelltext würde denk ich mal weiterhelfen!

Grishnak 12. Okt 2005 21:44

Re: Frage zu Übergabe eines Arrays aus einer Unit in eine an
 
Bedarf! :mrgreen:

Ich vermute mal folgendes: Du hast in der Unit einen Typ definiert (z.B. "type TStringArray = array of string;") und die Funktion liefert genau diesen Typ zurück (z.B. "function Egal(...): TStringArray;"). Nun hast du aber in der Haupt-Unit ein String-Array deklariert (z.B. "var Namen: array of string;") und versuchst nun, in diesem das Ergebnis der obigen Funktion zu übertragen (z.B. "Namen:=Egal(...);"). So klappt das nicht! Aber wenn du "var Namen: TStringArray;" deklarierst, sollte es funktionieren!

BingoBongo 13. Okt 2005 08:28

Re: Frage zu Übergabe eines Arrays aus einer Unit in eine an
 
jetzt funktionierts. *vorfreudeaufundabhüpf*
Es war tatsächlich die Typdeklaration. DAS kann man ja nun echt schlecht erraten, dass ich den gleichen Typnamen für die Variable in der Hauptunit angeben muß, wie der deklarierte in der eigentlichen Unit, wo er deklariert wurde.

Vielen Dank für die Hilfe.

Bingo

himitsu 13. Okt 2005 08:44

Re: Frage zu Übergabe eines Arrays aus einer Unit in eine an
 
Du mußt NICHT den gleich TypNamen übergeben.

Es geht nicht, wenn du den Typ in jeder der Units deklarierst.
Also, wenn type TStringArray = array of string; in jeder der Units definiert wird, dann sind diese Typen dennoch nicht untereinander komptibel.
Unit1.TStringArray <> Unit2.TStringArray


Und wenn du einen neuen Typ vom alten ableitest, dann siend diese dennoch kompatiebel,
obwohl sie ja enien anderen Namen haben.
Delphi-Quellcode:
type TStringArray = array of string;

type TMeinArray = TStringArray;

TStringArray = TMeinArray

Im Endefekt mußt du einfach nur dafür sorgen, das immer der selbe Grundtyp verwendet wird.
Es muß halt immer auf die selbe Typendefinition in der selben Unit zurückzuführen sein, dann ist der Typ immer kompatibel, da es ja auch der selbe Typ ist :)

SMO 13. Okt 2005 12:36

Re: Frage zu Übergabe eines Arrays aus einer Unit in eine an
 
Falls es jemand noch nicht weiß: In der Delphi-Unit Types sind einige dynamische Arraytypen deklariert (zumindest in Delphi 2005, aber auch schon in Delphi 7, wenn ich mich recht erinnere). Um solche Probleme zu vermeiden, kann man die Types Unit in die uses-Klausel aufnehmen und diese Typen benutzen statt sich eigene zu definieren.
Die Typen sind alle nach dem selben Schema benannt: TXxxxDynArray. Ein dynamisches "array of string" ist dort also TStringDynArray.

Kedariodakon 13. Okt 2005 12:46

Re: Frage zu Übergabe eines Arrays aus einer Unit in eine an
 
Ist auch so in Delphi 7 :wink:

Bye

tigerman33 14. Okt 2005 08:39

Re: Frage zu Übergabe eines Arrays aus einer Unit in eine an
 
@himitsu:
Ich glaube, er hatte nicht den Typen redefiniert, sondern das gemacht, was Grishnak beschrieben hatte. Zu dem Thema findet man in der OH was unter dem Stichwort (glaub ich): Typkompatibilität und Typidentität (oder so)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 Uhr.

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