LCD Menü "error: conflicting types" / "incompatible pointer type"

OP #3153488
Lesenswert?
• ▲
▼
Hallo,

ich versuche gerade ein LCD Menü nach der Vorlage hier zu realisieren...
Beitrag "Re: LCD Menü"

Hier mal der relevante Code:
1
typedef struct MENU {
2
  const uint8_t *text;
3
  struct MENU *parent;
4
  struct MENU *child;
5
  void ( *fp )( void );
6
} MENU_ENTRY;
7

8
struct MENU *menu = menu_0; // Zeile 3
9
// menu = menu_1; funktioniert nicht (siehe Fehler)
10

11
static uint8_t item = 0;
12

13
const uint8_t menu0_item1_string[] = "M0 M1";  
14
const uint8_t menu0_item2_string[] = "M0 M2";
15

16
const uint8_t menu1_item1_string[] = "M1 E1";  
17
const uint8_t menu1_item2_string[] = "M1 E2";
18
const uint8_t menu1_item3_string[] = "M1 E3";
19

20
const MENU_ENTRY menu_0[] = {      
21
  { menu0_item1_string, 0, menu_1, 0 }, 
22
  { menu0_item2_string, 0, menu_2, 0 }
23
};
24

25
const MENU_ENTRY menu_1[] = {      
26
  { menu1_item1_string, menu_0, 0, 0 },
27
  { menu1_item2_string, menu_0, 0, 0 },
28
  { menu1_item3_string, menu_0, 0, 0 }
29
};
30
void print_menu(void){
31
  
32
  lcd_clear();
33
  lcd_string(menu[item].text);
34
  lcd_setcursor(0,1);
35
  //lcd_string(*menu[item+1].text);
36
  
37
}

Außer ein paar Warnungen wird das ganze kompiliert und der Menüeintrag 
wird auch ausgegeben.

Versuche ich aber den Pointer mit "menu = menu_1" zu ändern, erhalte ich 
den folgenden Fehler:
1
menu.c:4:1: warning: data definition has no type or storage class [enabled by default]
2
menu.c:4:1: warning: type defaults to 'int' in declaration of 'menu' [enabled by default]
3
menu.c:4:1: error: conflicting types for 'menu'
4
menu.c:3:14: note: previous definition of 'menu' was here
5
menu.c:4:8: warning: initialization makes integer from pointer without a cast [enabled by default]
6

7
menu.c: In function 'print_menu':
8
menu.c:39:17: error: subscripted value is neither array nor pointer nor vector

Was mache ich denn falsch? :-(
Danke schonmal!
OP #3153499
Lesenswert?
• ▲
▼
Danke für die flotte Antwort :)

Das ist bereits in der Headerdatei passiert.
1
typedef struct MENU {
2
  const uint8_t *text;
3
  struct MENU *parent;
4
  struct MENU *child;
5
  void ( *fp )( void );
6
} MENU_ENTRY;
7

8

9
typedef void (*function) (void);
10

11
const MENU_ENTRY menu_0[];
12
const MENU_ENTRY menu_1[];
13
const MENU_ENTRY menu_2[];
14

15
//void io_conf(uint8_t *DDR, uint8_t *P[], uint8_t direction);
16
void print_menu(void);

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.