![]() |
Inkompatible Typen: lokales dynamisches Array und Integer??
Hi Leute,
warum bekomme ich bei dieser Procedure eine Meldung, dass inkompatible Typen vorliegen:
Delphi-Quellcode:
procedure TForm1.Primfaktoren(Zahl:integer;var Faktoren:array of integer);
var teiler, zaehler, i : integer; begin repeat SetLength(Faktoren,0); //<- Hier taucht die Meldung einmal auf teiler:=0; repeat teiler := teiler +1; zaehler:=0; for i:=1 to teiler do if teiler mod i = 0 then zaehler := zaehler + 1; until (zahl mod teiler = 0) and (zaehler = 2); zahl := zahl div teiler; setLength(Faktoren,length(Faktoren)+1); //<- Hier nochmals Faktoren[length(Faktoren)] := teiler; until zahl = 1; end; Die Funktion soll die übergebene Zahl in ihre Primfaktoren aufteilen und diese Primfaktoren dann in einen Array schreiben, der zurückgegeben wird. Aufrufen tu ich die Prozedur folgendermaßen:
Delphi-Quellcode:
var X: array of integer;
(...) procedure TForm1.Button1.Click(Sender:TObject); begin Primfaktoren(132,X); end; (...) end. //EDIT1: Es sollte SetLength(Faktoren,0); heißen, voher stand statt 0 ein i! |
Re: Inkompatible Typen: lokales dynamisches Array und Integ
Vielleicht hast du die Variable Faktoren irgendwo anders schon deklariert?
|
Re: Inkompatible Typen: lokales dynamisches Array und Integ
Das Problem ist, dass die Variable i zu diesem Zeitpunkt noch keinen Wert zugewiesen bekommen hat, sie ist also faktisch undefiniert. Da steht höchstens irgendein Wert drin, der vorher an dieser Stelle im Speicher stand. Und das kann auch ein negativer Wert sein, und deswegen wird der Compiler sich wohl beschweren.
MfG Binärbaum |
Re: Inkompatible Typen: lokales dynamisches Array und Integ
du kannst das ganze so lösen:
Delphi-Quellcode:
dann kommt die meldung nicht mehr...
type
TDynArr = Array of Integer; [...] procedure TForm1.Primfaktoren(Zahl:integer;var Faktoren: TDynArr); begin [...] |
Re: Inkompatible Typen: lokales dynamisches Array und Integ
Zitat:
Zitat:
Zitat:
Aber das ganze macht ja jetzt nichts anderes, als ich geschrieben habe, sondern schiebt dazwischen nur 'ne Type-Deklaration, sodass nicht ein Array verändert wird, sondern ein selbstdefinierter Type, der ja aber letztendlich nur ein Array ist.... :gruebel: Warum ging meine Version denn nicht??? |
Re: Inkompatible Typen: lokales dynamisches Array und Integ
liegt einfach an delphi. Wenn du in zwei unterschiedlichen Units den Typ "TDynArray" deklarierst sind diese auch untereinander incompatibel (laut compiler) so das du es explizit auf das TDynArray der anderen Unit casten müsstest. Und genauso verhält es sich wenn du es im ProcedureKopf deklarierst, es ist dann eben eine neudeklaration des arrays..
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:28 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