const struct Initialisierung

Gast #882522
Lesenswert?

Hallo Leute,
ganz komischer Fehler, vorweg, ich arbeite mit einem ATmega32 unter AVR 
Studio mit GCC.
Ich bin gerade dabei mir ein LCD Menu zu schreiben.
Folgendes hab ich bisher geschrieben:
1
static const char Hauptmenu_0[] = "Ausschalten";
2
static const char Hauptmenu_1[] = "Optionen";
3
static const char Hauptmenu_2[] = "Kalibrierung";
4

5
//Struktur der einzelenen Einträge
6
typedef struct {
7
  const char *text;
8
  unsigned char next;
9
  unsigned char prev;
10
} menu_struct;
11

12
//Struktur initialisieren
13
const menu_struct menue[] = {
14
  {Hauptmenu_0, 1, 2},
15
  {Hauptmenu_1, 2, 0},
16
  {Hauptmenu_2, 0, 1},
17
};

So wunderbar, funktioniert auch solange ich alles in der main.h 
definiere. Lagere ich dies allerdings aus, z.B. in menu.h, und 
includiere das ganze in "main" meckert der Compiler "menu.o:(.data+0x0): 
multiple definition of `menue'".

Ich meine, klar, es sind Konstanten und wenn die dann includiert werden 
von main macht er wahrscheinlich ne Kopie, tja, und dann hab ich ne 
multiple definition...
Meine Frage nun, wie kann ich das umgehen? #ifndef #define vielleicht? 
Ich meine klar, einfach ne "main.h" definieren und dann die Struktur 
dort initialiesieren, aber ich wollte eigendlich eine Datei wo alle 
Sprachspezifieschen Einstellungen drin stehen, halt der Header des 
Menues.

Vielleicht hat ja jemand ne Idee...

Gruß
Ralf
#882527
Lesenswert?

@ Alex:

Das schützt aber nicht vor "multiple definition".

@ Timebeast:

In ein Header-File packt man nur die Deklarationen, die Definitionen in 
ein C-File.

Dies
1
//Struktur der einzelenen Einträge
2
typedef struct {
3
  const char *text;
4
  unsigned char next;
5
  unsigned char prev;
6
} menu_struct;
7

8
extern const menu_struct menue[];
gehört in ein Haeder-File.

Und dies
1
static const char Hauptmenu_0[] = "Ausschalten";
2
static const char Hauptmenu_1[] = "Optionen";
3
static const char Hauptmenu_2[] = "Kalibrierung";
4

5
//Struktur initialisieren
6
const menu_struct menue[] = {
7
  {Hauptmenu_0, 1, 2},
8
  {Hauptmenu_1, 2, 0},
9
  {Hauptmenu_2, 0, 1},
10
};
gehört in ein C-File.
Gast #882827
Lesenswert?

Tjajaja, Grundlagen der Programmierung, ne Variablen Definition im 
Header, man man man, so doof war ich ja noch nie, erstaunlich :-(

Ihr habt natürlich völlig Recht, aber es zeigt sich mal wieder, kein 
Fehler ist abstrakt genug um nicht gemacht zu werden. ;-)

Vielen vielen Dank nochmal...

Gruß
Ralf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren