Variable einfrieren

Hallo,

ich möchte eine konstante Variable innerhalb einer Klasse anlegen, die Ihren Wert allerdings erst zur Programm-Laufzeit bezieht, also nach Zuweisung quasi eingefroren wird?

Falls das nicht ohne weiteres zu bewerkstelligen ist, wäre es nützlich zu wissen, wie ich Variablen einer Form in einer anderen Form benutzen kann.

Danke.

Hallo
machs doch so das du die Konstante Variable erst erstellst wenn du den Wert hast.

MfG Der einzigware

Hallo

Geht schon. Du nimmst einen Zeiger auf dieses

template 
class Consty
 {
 T t;
 public:
 Consty(T wert) : t(wert) {}
 T get() {return t;} 
 };

als Member auf NULL. Sobald Du nun den Wert hast, allokierst Du den. Später kann man den Wert nur mehr kriegen.

lG
Martin B

Hallo,

also Dein Beispiel, Martin, konnte ich noch nicht ganz durchschauen. Werde aber nochmal rumprobieren.

@dereinzigware

Nun so hab ich zuerst auch gedacht. Aber eine Funktion wie etwa

int myVar;

void setVar (int a)
{
myVar = a;
}

funktioniert so nicht… mit const meckert er eben wegen dem const. Ich habe probeweise darauf verzichtet, dann geht es zwar, aber sobald eine andere Form aufgerufen wird, ist der Wert nicht mehr da.

Ist das nicht zu umgehen?

Nochwas: Welchen Grund könnte es haben, dass mein Code nur in der MainForm korrekt ausgeführt wird, bei identischen includes?

Hallo,

ich möchte eine konstante Variable innerhalb einer Klasse
anlegen, die Ihren Wert allerdings erst zur Programm-Laufzeit
bezieht, also nach Zuweisung quasi eingefroren wird?

Du kannst Variablen, die innerhalb einer Klasse als const deklariert sind, beim Konstruieren des Objekts initialisieren. Beispiel:

class Bla
{
const int zahl;
public:
Bla(int haltMichFest) : zahl(haltMichFest) {}
}

Nach Anlegen eines Objekts vom Typ Bla durch den Konstruktor Bla(int) wird der übergebene in der Variablen zahl gehalten, zahl kann aber nicht mehr geändert werden.

Viele Grüße,
Sebastian

Hallo dks

also Dein Beispiel, Martin, konnte ich noch nicht ganz durchschauen.
Werde aber nochmal rumprobieren.

Ein Beispiel:

template 
class Consty
 {
 T t;
 public:
 Consty(T wert) : t(wert) {}
 T get() {return t;} 
 };

class Blah
{
 const int frozen;
 Consty \*setLater;
 public:
 Blah();
};

Blah::Blah() :
 frozen(), // nicht mehr zu aendern
 setLater(0) // die schon
{
 // hier sonst was machen......
 setLater = new Consty(123); // bleibt so, nur get-Funktion
}

int main()
{
 Blah b;
 return 0;
}

Später kann man das nur noch abfragen mit:

int a = setLater-\>get();

Alles klar?

Nochwas: Welchen Grund könnte es haben, dass mein Code nur in der
MainForm korrekt ausgeführt wird, bei identischen includes?

Zeig doch mal Deinen Code, dann sehen wir weiter. Wenn aber von „MainForm“ die Rede ist, hört sich das sehr nach dem Brett für .net an.

lG
Martin B