![]() |
Array ohne typ, aber wie ?
Hallo,
ich habe mehre array unterschiedlichen typs und nun möchte ich gerne eine funktion haben die mit allen typen was anfangen kann in etwa so: procedure DeleteArrayItem(Liste: array of) // aber das geht ja leider nicht :( hat jemmand eine idee ??? meine derzeitige delete funktion sieht so aus:
Delphi-Quellcode:
procedure TBO.DeleteBall(Index:Integer);
var i:Integer; begin if Length(ball) -1 >= 1 then begin for i:=Index to HIGH(BALL) do BALL[i]:=BALL[i+1]; SetLength(BALL,Length(ball)-1 ); end; end; |
Re: Array ohne typ, aber wie ?
Zitat:
versuch mal
Delphi-Quellcode:
mfG
array of const
mirage228 |
Re: Array ohne typ, aber wie ?
schreib' in den Type Beriech:
TStringDynArray = array of string; Und dann nimm Als Variablentyp TStringDynArray |
Re: Array ohne typ, aber wie ?
Schonmal den Typ Variant angeguckt?
Mit einem Array of Variant kannst Du so ziemlich alles machen. |
Re: Array ohne typ, aber wie ?
ist der typ dann egal ???
|
Re: Array ohne typ, aber wie ?
Wenn Du das gleich richtig machen willst 8) dann verwende verkettete dynamische Listen. Damit geht das garantiert. :P
|
Re: Array ohne typ, aber wie ?
Zitat:
|
Re: Array ohne typ, aber wie ?
"Array of Pointer", und die pointer dann auf dynamisch angelegte Variablen.
Ich hab zwar nicht direkt im Kopf, wie ich dynamisch Speicher anfordern kann, aber so würd ich's in C machen. Statt nem Array geht natürlich auch ne (verkettete) Listenklasse. [edit] natürlich sind dann Typecasts unumgänglich |
Re: Array ohne typ, aber wie ?
Zitat:
Delphi-Quellcode:
Ansonsten sind das normale dynamische Arrays (SetLengtht usw.) Schau mal in der Hilfe unter dem Stichwort VarType nach, da bekommst Du alles aufgelistet.
// Deklaration
var Ball : Array of Variant; // Konstante Zuweisung Ball := VarArrayOf([1, "Zwei", now]); // Abfrage der Werte if VarType(Ball[i]) = varString then... |
Re: Array ohne typ, aber wie ?
ich habs jetzt so gemacht:
Delphi-Quellcode:
aber egal wie ich es mache: schreibe ich z.b. array of const bekomme ich immer den gleichen fehler bei setLength:[Fehler] Tools.pas(87): Inkompatible Typen
procedure DeleteArrayItem(liste:array of Variant; Index:Integer);
var i:Integer; begin if Length(liste) -1 >= 1 then begin for i:=Index to HIGH(liste) do liste[i]:=liste[i+1]; SetLength(liste,Length(liste)-1 ); end; end; woran liegt das ????? was mache ich falsch ! |
Re: Array ohne typ, aber wie ?
ich würde einfach verkettete Listen nehmen.
Delphi-Quellcode:
procedure DeleteArrayItem(liste:TList; Index:Integer);
begin if Liste.count -1 >= 1 then begin dispose(Liste.Items[Index]); Liste.Delete(Index); end; end; |
Re: Array ohne typ, aber wie ?
ich wollte eigentlich nicht TList benutzen, sondern einfach nur ein array of
|
Re: Array ohne typ, aber wie ?
Zitat:
TList ist genau das was Du brauchst. |
Re: Array ohne typ, aber wie ?
nein ein grund gibst dafür nicht !!!(auser das ich damit noch nie garbeitet habe )
ich möchte es halt nicht, es muss doch auch mit arras gehen..... nur wenn es wirklich nicht mit array geht werde ich auf eine TList zurückgreifen |
Re: Array ohne typ, aber wie ?
Zitat:
Ich empfehle Dir TList zu verwenden. Array's verwende ich eigentlich gar nicht mehr. |
Re: Array ohne typ, aber wie ?
Alternativ geht evtl. auch ein array of TObject, und dann die arrays bei der Übergabe casten. Habs bisher nur mit einem einzelnen TObject gemacht, aber möglicherweise geht's auch mit einem array :gruebel:
\\edit: Ist im Wesentlichen wie die Lösung mit dem array of Pointer, nur dass der Pointer hier typisiert ist... |
Re: Array ohne typ, aber wie ?
Zitat:
@ripper8472: Zitat:
|
Re: Array ohne typ, aber wie ?
etwas spät, aber ich habe den Trehd aus den Augen verloren tut mir leid.
Das Problem habe ich immer noch. ich wollte damit eine lösch procedure schreiben. Sie soll einen eintrag aus einem Array löschen egal welche typ dieser Array hat... |
Re: Array ohne typ, aber wie ?
Zitat:
Wirklich passend... Schau mal ![]() ![]() |
Re: Array ohne typ, aber wie ?
override schon probiert?
|
Re: Array ohne typ, aber wie ?
Zitat:
@malo habe mir mal die zwei lings angeschaut: in den einen wird gesagt das es nicht geht, aber wie macht es denn borland ? z.b. bei SetLenght ? dort wird nur ein array erwartet aber der typ ist egal.... es gibt noch andere funktionen z.b. High,usw |
Re: Array ohne typ, aber wie ?
Zitat:
Eine überschreibende Methode muss ja die gleiche signatur wie die überschriebene haben. Falls malo overload meinte, wären wir wieder beimAusgangsproblem. :mrgreen: Zitat:
Das ganze wird gerne als Compiler magic bezeichnet. Denn der Compiler wählt die richtige Funktion aus und auch in der wird er ein paar nur mit Pointern um sich werfen. ;) Ich glaube mit einem Array, der hinter einer TList-Ableitung versteckt ist sollte es problemlos funktionieren. Es gibt IMHO sowieso nur wenige Situationen in denen "nackte" Arrays sinnvoll sind. ;) |
Re: Array ohne typ, aber wie ?
Zitat:
Im 2. link ist ja eine Funktion gepostet worden. Setlength oder High werden wohl ähnlich aussehen. Ansonsten gibt es noch die Möglichkeit von überladenen Methoden ;) |
Re: Array ohne typ, aber wie ?
@malo
wenn ich z.b ein spiel schreibe, sind die array wo die objekte drin sind immer andres defniert, und ich möchte nunmal nicht immer bei jedem neuen array eine neue löschfunktion schreiben. (überlande funk/proc)); @Robert_G nein ich habe denn qullcode der System.pas nicht(habe D7PE) und wie geht das mit Format ? wenn du z.b. sagt: Format('Test %s, %d,[str,int]); dann wird ein string erwartet und ein integer. woher weiß der complier dann die richtige funktion ? Borland kann doch nicht für jede möglickeit eine funktion definiert haben, oder etwa doch ? |
Re: Array ohne typ, aber wie ?
Bei Format wird's wohl ein array of const sein. ;)
|
Re: Array ohne typ, aber wie ?
sry hab mir das ganze vl doch zu wenig durchgelesen :?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:27 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