Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Konstanten Definition


skall - Di 27.01.09 15:05
Titel: Konstanten Definition
morgen...

Also Mal ne Frage...

Ich muss 2 Constanten definieren, die unter Type meiner Unite benötigt werden... Ding ist nur, dass die Constanten sich in einer weiteren Unit definieren... Somit findet er diese nicht...

Ist es Möglich dies Iwei zu umgehen? :o

Hier mal zur verdeutlichung die relewanden Ausschnitte des QuellCodes:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
unit DateioperationenSolar;


interface

uses SysUtils, Dialogs, classes;

Const ersteStunde = StundenListe[1];
      letzteStunde = StundenListe[12];

type
  TStundenMittel = array[ersteStunde..letzteStunde] of real;
  TDatenSatz = Record
               wert: real;
               Stunde: integer;
               Minute: integer;
               end;

procedure DatenEinlesen (DatumWert:StringVar MittelWert:TStundenMittel; Var MaxWert:TDatenSatz);
procedure DatenSpeichern (MittelWert:TStundenMittel; Var MaxWert:TDatenSatz; Var DatumWert: String);
//function PosEx(Substr: string; S: string; P: Integer): Integer;

Var StundenListe : TStundenListe;

implementation
uses DatenEinlesen;

Var MittelWertListe : TMittelWerte;
    StundenListe : TStundenListe;



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
unit DatenEinlesen;

interface

uses SysUtils, Dialogs, classes;

type   TMittelWerte = array[1..12of Real;
       TStundenListe = Array[1..12of Integer;



  ersteStunde := StundenListe[1];
  letzteStunde := StundenListe[12];


Handelt sich um die beiden Varriablen: ersteStunde und letzteStunde, welche aus der StundenListe definiert werden...


Delete - Di 27.01.09 15:11

Was denn nun, Konstanten oder Variablen? Du kannst keine Konstanten aus einer Variablen befüllen, der Wert muss schon zur Designtime bekannt sein.


JDKDelphi - Di 27.01.09 15:12
Titel: Konstanten
Hallo..

bau Dir eine globale Unit "myTypdef" , wo Du deine Konstanten und Typen definierst.

Diese verwendest Du dann in den beiden Modulen und schon gibt's keine Namenskonflikte..

Mal abgesehen davon, das der Source, den Du dort postest, so eigentlich nicht funktioniert..


Gruss


skall - Di 27.01.09 15:17

ja wie gesagt dass sind nur die relewanten Auschnitte....


skall - Di 27.01.09 15:20

wie jetzt...

Soll ich noch ne Unit schrieben wo die Daten aus der ersten Unit genommen werden und in die Varriablen für die erste Unit definiert werden?


Delete - Di 27.01.09 15:25


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
unit Brückenunit;

interface

type   TMittelWerte = array[1..12of Real;
       TStundenListe = Array[1..12of Integer;

const Konst1 = 1;
      Konst2 = 123;
      Konst3 = 'Ein String';
...


Diese Unit in allen einbinden, die auf diese Daten zugreifen.


JDKDelphi - Di 27.01.09 15:31
Titel: Konstanten
Genauso , wie DeddyH das gepostet hat..

Diese paar Anweisungen sind doch wohl nicht zuviel verlangt, zumal dann ein Ändern im Programm noch sicherer wird, da die Konstanten
nur einmal vorhanden sind...

Gruss


Delete - Di 27.01.09 15:36

Abgesehen davon sind die definierten Typen dann auch kompatibel. Definierst Du denselben Typ in 2 unterschiedlichen Units, sind das für Delphi auch 2 unterschiedliche Typen.


skall - Di 27.01.09 15:43

Lassen Sich Konstaten überhaupt auf sowas wie "StundenListe[1]" festlegen? Weil der zickt da iwie rum...


JayEff - Di 27.01.09 15:56

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Du kannst keine Konstanten aus einer Variablen befüllen, der Wert muss schon zur Designtime bekannt sein.

Das reicht eigentlich als Antwort auf deine Frage :)
Designtime = Der Moment, in dem du dein Programm schreibst. Du kannst den Wert nicht aus einer Datei auslesen oder ähnliches.


BenBE - Di 27.01.09 15:58


Delphi-Quelltext
1:
const Stundenliste: TStundenliste = (1,2,3,4,5,6,7,8,9,10,11,12);                    


JDKDelphi - Di 27.01.09 16:01
Titel: Konstanten
Hallo,

Du kannst das so nicht machen, da keine Variable oder ein Typ in eine Konstante gefüllt werden kann.

Const meins = Stundenliste[1] geht nicht!!!


Hier ein kleiner Rumpf, was geht:



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
// globale Unit
Unit myConst

....

CONST  Konst1 = 1;
       Konst2 = 12;

TYPE  Verwende = Array[Konst1..Konst2];
...

END.

//-----------------------------
Unit Eins;

uses myConst;

......

Var a : Verwende;

Procedure machwas;
BEGIN

     a[Konst1]=10;     // 1. Feld füllen
     a[Konst2] = 20;   // letzes Feld füllen
END;

//------------------------------
Unit Zwei;

uses myConst;

......

Var b : Verwende;

Procedure machwas2;
BEGIN

     b[Konst1]=10;     // 1. Feld füllen
     b[Konst2] = 20;   // letzes Feld füllen
END;

//------------------------------
Unit drei;

uses myConst;

......

Var c : Verwende;


Procedure machwas3;
BEGIN

     c[Konst1]=10;     // 1. Feld füllen
     c[Konst2] = 20;   // letzes Feld füllen
END;


....



Das Ganze natürlich möglichst auch objektorientiert


Gruss

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


skall - Di 27.01.09 17:29

Danke vielmals :)

Habs jetzt einfach umgangen...
Hätte mich damit sicher noch den ganzen Tag rum geärgert xD


der organist - Di 27.01.09 17:33

Konstante heisst nun mal Konstante, weil sie konstant ist. Auch wenn der Wert vielleicht nur einmal gesetzt wird und danach nie wieder geändert wird, ist in deiner Definition doch eine variable Nummer/string/etc vorhanden.