Forum: PC-Programmierung structs direkt Werte zuordnen, c++


von cler (Gast)


Lesenswert?

Hallo...

Möchte direkt am Anfang der Definition einer Struktur Werte zuweisen.

Bsp:


typedef struct{
int x=0;
}x;


leider schreibt mir der avr gcc compiler: expected: ':', etc before '=' 
token, vom C programmieren weiß ich dass beim int Datentyp irgendwelche 
Zahlen drinnenstehen, die gerade im RAM draufsind. Wie ist das nun bei 
einer Struktur bzw. beim avr?

salve

von Karl H. (kbuchegg)


Lesenswert?

Du musst unterscheiden zwischen dem Definieren einer Struktur, als dem 
Erzeugen der Blaupause welche beschreibt wie eine Struktur grundsätzlich 
aussieht und dem erzeugen einer Variablen, die genau diese Gestalt hat. 
Die struct selbst, also die Blaupause, kannst du nicht initialisieren. 
Die ist ja nur eine Aufbauanleitung.
Wohl aber kann man eine Variable initialisieren
1
struct abc
2
{
3
  int x;
4
  int y;
5
};

das definiert die Struktur struct abc. Damit hat man noch keine 
Variable. Die Variable erzeugt man erst danach.
1
struct abc dieVariable = { 8, 5 };

von (prx) A. K. (prx)


Lesenswert?

Da es hier um C++ geht kann man mit dem default constructor auch dorthin 
gelangen, ohne jede Instanz einzeln zu initialisieren.

Also
 struct S {
    S() { x = 0; }
    int x;
 } x;

von Klaus W. (mfgkw)


Lesenswert?

oder noch etwas eleganter und mehr C++-like:
1
struct S {
2
    S()
3
    : x(0)
4
    {}
5
    int x;
6
 } x;

von Hanswurst (Gast)


Lesenswert?

1
struct abc { int x, y; } var = {1,2};

so meinst du das wohl, cler... aber das sind zwei schritte so wie int x 
= 1;
die einzige möglichkeit den speicherbereich direkt beim deklarieren der 
variablen (klasse, oder auch struct-krüppel-klasse (lol)) zu 
initialisieren besteht in der initialisierungsliste (auf den niedrigeren 
ebenen wird sich wahrscheinlich nichts ändern). oder falls du es so 
meinst, dass x in jeder instanz der struktur x den gleichen wert haben 
soll, dann musst du es static deklarieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.