AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Variable für const array

Ein Thema von Benmik · begonnen am 1. Okt 2017 · letzter Beitrag vom 6. Okt 2017
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.452 Beiträge
 
Delphi 12 Athens
 
#11

AW: Variable für const array

  Alt 2. Okt 2017, 15:40
@Uwe:
Und auch das hatte ich probiert. Ich hoffe, ich habe jetzt keinen Flüchtigkeitsfehler begangen, aber der Compiler sagt bei AEnum := Enum1; : "Inkompatible Typen: TArray<TEnum> und array[0..4] of TEnum.
Dann weicht dein Code noch irgendwo von meinem ab. Dort gibt es nämlich nirgendwo ein array[<irgendwas>] of .
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#12

AW: Variable für const array

  Alt 2. Okt 2017, 16:00
Wie schon geschrieben, du hast Recht. Danke dir.
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#13

AW: Variable für const array

  Alt 2. Okt 2017, 18:42
Darf ich noch fragen, warum die Lösung von BerndS nicht funktioniert?
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.051 Beiträge
 
Delphi 2009 Professional
 
#14

AW: Variable für const array

  Alt 2. Okt 2017, 21:50
Noch 'ne Variante:
Delphi-Quellcode:
type
  TEnum =(eEins,eZwei,eDrei,eVier,eFünf,eSechs,eSieben,eAcht,eNeun,eZehn);
type
  TEnumarray = packed array[0..4711] of TEnum;
const
  Enum1 : packed array[0..4] of TEnum = (eEins,eDrei,eSechs,eSieben,eZehn);
  Enum2 : packed array[0..6] of TEnum = (eZwei,eVier,eFünf,eSechs,eAcht,eNeun,eZehn);


function IstDrin(VarE:TEnum;const AEnum: TEnumarray; Size: Integer):Boolean;
var
i: Integer;
begin
  Result := False;
  For i := 0 to Size - 1 do
    If AEnum[i] = VarE
      then exit(True);
end;

procedure MachWas(AEnumNr:integer);
var
  i:integer;
  AEnum: ^TEnumarray;
  ASize: Integer;
begin
  case AEnumNr of
    1: begin
         AEnum := @Enum1;
         ASize := Length(Enum1);
    end;
    2: begin
         AEnum := @Enum2;
         ASize := Length(Enum2);
    end;
  end;
  If IstDrin(eSieben,AEnum^, ASize) then
  writeln('ist drin');
end;
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.452 Beiträge
 
Delphi 12 Athens
 
#15

AW: Variable für const array

  Alt 2. Okt 2017, 23:05
Darf ich noch fragen, warum die Lösung von BerndS nicht funktioniert?
Weil ein Pointer auf ein dynamisches Array nicht mit einem Pointer auf ein statisches Array kompatibel ist. Ein dynamisches Array ist selbst schon ein Pointer auf den Array-Speicher mit einem Verwaltungsblock davor. Dieser Block fehlt bei einem statischen Array, deswegen kann man keinen Pointer auf ein statisches Array verwenden, wenn ein dynamisches erwartet wird - selbst wenn man versucht, die Pointer auszutricksen und womöglich noch hard-zu-casten. Das ist in den aktuellen Delphi-Versionen ja wie gezeigt auch nicht nötig.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#16

AW: Variable für const array

  Alt 2. Okt 2017, 23:59
Du liebe Zeit. Auf sowas soll man kommen. Danke.
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#17

AW: Variable für const array

  Alt 4. Okt 2017, 07:24
Ja, da hätte ich es doch besser vorher testen sollen, was ich nachträglich noch gemacht habe.
Allerdings hätte ich es wahrscheinlich den Beispielprojekt nicht mit einem Array sondern per Set gemacht.
Delphi-Quellcode:
type
  TEnum = (eEins, eZwei, eDrei, eVier, eFünf, eSechs, eSieben, eAcht, eNeun, eZehn);
  TEnumSet = set of TEnum;

const
  Enum1 = [eEins, eDrei, eSechs, eSieben, eZehn];
  Enum2 = [eZwei, eVier, eFünf, eSechs, eAcht, eNeun, eZehn];

function IstDrin(VarE:TEnum;const AEnum: TEnumSet):Boolean;
var VEnum:TEnum;
begin
  Result := False;
  For VEnum in AEnum do
    If VEnum = VarE
      then exit(True);
end;

procedure MachWas(AEnumNr:integer);
var
AEnum: TEnumSet;
begin
  case AEnumNr of
    1 : AEnum := Enum1;
    2 : AEnum := Enum2;
    else
      Exit;
  end;
  If IstDrin(eDrei,AEnum)
    then ;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.452 Beiträge
 
Delphi 12 Athens
 
#18

AW: Variable für const array

  Alt 4. Okt 2017, 08:35
Allerdings hätte ich es wahrscheinlich den Beispielprojekt nicht mit einem Array sondern per Set gemacht.
Das ist aber nicht immer möglich: Im Gegensatz zu einem Set kann in einem Array ein Element mehrfach vorkommen und die Elemente können in bestimmter Weise angeordnet sein.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#19

AW: Variable für const array

  Alt 6. Okt 2017, 20:06
Die Variante gefällt mir aber auch gut.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

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 03:28 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