AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit dyn. Arrays bei Übergabe an Funktion
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit dyn. Arrays bei Übergabe an Funktion

Ein Thema von kalmi01 · begonnen am 7. Dez 2004 · letzter Beitrag vom 7. Dez 2004
Antwort Antwort
Seite 1 von 2  1 2      
kalmi01
(Gast)

n/a Beiträge
 
#1

Problem mit dyn. Arrays bei Übergabe an Funktion

  Alt 7. Dez 2004, 13:18
Hallo,
warum bekomme ich bei diesem Konstrukt die Fehlermeldung: Inkompatible Typen ?

In Unit 1 steht folgendes:

Delphi-Quellcode:
implementation
  {$R *.dfm}

  uses
    unit2;

  procedure TForm1.Button1Click(Sender: TObject);
    var
      UpdateListFile : array of string;
    begin
      if Check4UpdateList(UpdateListFile)
      then Edit1.Text := 'OK';
    end;

end.

In Unit 2 steht folgendes:
Delphi-Quellcode:
unit Unit2;

interface
  function Check4UpdateList(UpdateListFile : array of string) : boolean;


implementation
  function Check4UpdateList(UpdateListFile : array of string) : boolean;
    begin
      SetLength(UpdateListFile, 1); // hier gibts den Fehler
      Result := true;
    end;

end.
Würde mich mal interessieren, wo mein Denkfehler liegt.
Gruß
Michael
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem mit dyn. Arrays bei Übergabe an Funktion

  Alt 7. Dez 2004, 13:21
Zitat von kalmi01:
warum bekomme ich bei diesem Konstrukt die Fehlermeldung: Inkompatible Typen?
Weil array of string nicht gleich array of string ist, zumindest in der Pascal Logik.

Erstelle Dir einen Typen, den Du dann überall für array of string einsetzt.

Delphi-Quellcode:
unit Unit2;

interface
  type
    TStringArray = array of string;

  function Check4UpdateList(UpdateListFile : TStringArray) : boolean;


implementation
  function Check4UpdateList(UpdateListFile : TStringArray) : boolean;
    begin
      SetLength(UpdateListFile, 1); // hier gibts den Fehler
      Result := true;
    end;

end.
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Problem mit dyn. Arrays bei Übergabe an Funktion

  Alt 7. Dez 2004, 13:23
Hallo kalmi01,
das selbe Problem hatte ich auch schon des öfteren.
Beim übergeben eines dynamischen arrays an eine Methode wird der Array innerhalb der Methode statisch. Ein Lösungsansatz wäre nur einen Zeiger auf den Array zu übergeben und diesen dann innerhalb der Methode zu dereferenzieren und dann setlength anzuwenden. Kann aber nicht garantieren, dass das klappt, habs nämlich selber noch nie versucht.
Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Problem mit dyn. Arrays bei Übergabe an Funktion

  Alt 7. Dez 2004, 13:26
Zitat von Jan:
Beim übergeben eines dynamischen arrays an eine Methode wird der Array innerhalb der Methode statisch.
Das hat nichts damit zu tun. Delphi moniert, dass zweimal ein Typ deklariert wird, in diesem Fall array of String. Auch wenn es die gleiche Definition ist, so wird er zwei mal deklariert und Pascal/Delphi kann nicht garantieren, dass das gleiche gemeint ist und stoppt mit einem Compiler-Fehler. Wenn man jetzt einmal einen Typen deklariert, also z.B.
Delphi-Quellcode:
type
  TStringArray = array of String;
und dann immer den neuen Typen nutzt, so ist garantiert, dass es sich immer um den gleichen Typen handelt.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Problem mit dyn. Arrays bei Übergabe an Funktion

  Alt 7. Dez 2004, 13:41
und warum kann denn dann alles machen was man mit einer statischen stringlist auch machen kann? also ich verstehe nicht, warum da jetzt unterscheide gemacht werden. Wieso wird wegen dieser doppelten deklaration der array jetzt wie ein statischer array behandelt? wo liegt da der sinn? Und wieso limitiert dieses doppelte deklarieren nur den dynamischen aspekt des arrays? weil normalerweise müsste Delphi ja dann bei beliebigen übergebenen Variabeln an eine Methode Zweifel haben ob der Typ jetzt wirklich richtig ist und generell den typ als inkompatibel bezeichnen.
Das soll jetzt nicht heißen, dass du nicht Recht hast aber mich interessiert das, weil ich mich schon oft darüber gewundert hab was das soll.
Würde denn mein Lösungsvorschlag mit dem zeiger funktionieren?
Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Problem mit dyn. Arrays bei Übergabe an Funktion

  Alt 7. Dez 2004, 13:49
Zitat von Jan:
und warum kann denn dann alles machen was man mit einer statischen stringlist auch machen kann?
Wie kommst Du eigentlich auf statische Arrays? Die haben mit der Frage doch nichts zu tun. Und statisch wird auch nichts.

Zitat von Jan:
Wieso wird wegen dieser doppelten deklaration der array jetzt wie ein statischer array behandelt?
Hat ja keiner gesagt.

Zitat von Jan:
Und wieso limitiert dieses doppelte deklarieren nur den dynamischen aspekt des arrays?
... (siehe oben)

Zitat von Jan:
weil normalerweise müsste Delphi ja dann bei beliebigen übergebenen Variabeln an eine Methode Zweifel haben ob der Typ jetzt wirklich richtig ist und generell den typ als inkompatibel bezeichnen.
Nein, deswegen werden ja immer eindeutige Typen verlangt. Ob das jetzt einfache wie Integer, Btye oder String, Objeke wie TStrings, TControl oder TObject oder eigene Typen wie z.B. der obige TStringArray. Das ist egal. Es muss hat ein Type sein. array of String ist aber keine Typ, sondern eine neue Typendefinition.

Zitat von Jan:
Würde denn mein Lösungsvorschlag mit dem zeiger funktionieren?
Er wäre gefährlich (Typensicherheit ist verloren) aber möglich.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
kalmi01
(Gast)

n/a Beiträge
 
#7

Re: Problem mit dyn. Arrays bei Übergabe an Funktion

  Alt 7. Dez 2004, 14:06
Hi,

also nur so zur Info, mit Pointern hat ich es auch schon probiert.
War nicht vom gewünschten Ergebnis gekürt.

Delphi-Quellcode:
  type
    TStringArray = array of string;
Geht aber auch nicht so, wie gewollt.
Deklarier ich TStringArray in Unit1, so muß ich diese auch in Unit2
im uses referenzieren, damit es eindeutig bleibt.

Also hab ich eine eigene Unit für Typdefinitionen angelegt.
So weit so gut, die Syntaxprüfung meckert nicht mehr.

Leider gibts beim Compilieren: [Fataler Fehler] Interner Fehler: L1333

gefrusteter
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Problem mit dyn. Arrays bei Übergabe an Funktion

  Alt 7. Dez 2004, 14:21
Zitat:
und warum kann denn dann alles machen was man mit einer statischen stringlist auch machen kann?

Wie kommst Du eigentlich auf statische Arrays? Die haben mit der Frage doch nichts zu tun. Und statisch wird auch nichts.
Naja statisch meinte ich jetzt nur, weil der dynamische array of string der übergeben wird ja immernoch benutzbar ist, genau so wie ein statischer array, nur setlength, was ja auf einen dynamischen array anwendbar ist, klappt nicht, also folgerte ich, dass delphi den array jetzt statisch behandelt.
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Brainshock

Registriert seit: 26. Nov 2004
Ort: 37345
214 Beiträge
 
Delphi 7 Professional
 
#9

Re: Problem mit dyn. Arrays bei Übergabe an Funktion

  Alt 7. Dez 2004, 14:33
Hi,

anstatt einen neuen Typ für das Array zu deklarieren, nimm doch einfach den vorhandenen:

TStringDynArray aus der Unit:

Types
Da gibt's das nämlich schon...

mfg
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Problem mit dyn. Arrays bei Übergabe an Funktion

  Alt 7. Dez 2004, 14:41
Zitat von kalmi01:
Leider gibts beim Compilieren: [Fataler Fehler] Interner Fehler: L1333
Bleibt der Fehler auch nach einem Neustart bestehen? Kannst Du den evtl. soweit eingrenzen, dass Du mir das Projekt zusenden kannst, dann sende ich es an Danny weiter.

......

Edit: namen verdreht
Daniel W.
Ich bin nicht zurück, ich tue nur so
  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 09:19 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