Problem mit typedef und enum

#3005965
Lesenswert?

Hi zusammen,

ich habe in der header-Datei "gcode_handler.h" zwei enums definiert, 
welche ich mit typedef zu den Typen "gcode_handler_type_t" und 
"gcode_handler_state_t" definiere. Wenn ich diese nun in dieser 
header-Daei oder in der zugehörigen C-Datei verwende, dann kann ich die 
Bezeichner einwandfrei als Typen verwenden.
Nun möchte ich die Bezeichner "gcode_handler_type_t" und 
"gcode_handler_state_t" aber auch in einer anderen header- und C-Datei 
verwenden allerdings spuckt der Compiler dann folgendes aus:
1
Error  6  expected ')' before 'type'  H:\...\command_buffer.h  10  55
2
Error  5  expected specifier-qualifier-list before 'gcode_handler_type_t'  H:\...\command_buffer.h  5  5

Inhalt von gcode_handler.h:
1
 1:  enum gcode_handler_type_t_ {
2
 2:    GCODE_TYPE_IMMEDIATE,
3
 3:    GCODE_TYPE_SEQUENTIAL,
4
 4:    GCODE_TYPE_UNDEFINED
5
 5:  };
6
 6:  typedef enum gcode_handler_type_t_ gcode_handler_type_t;
7
 7:
8
 8:  enum gcode_handler_state_t_ {
9
 9:    GCODE_STATE_NEW,
10
10:     GCODE_STATE_RUNNING,
11
11:    GCODE_STATE_STOPED,
12
12:    GCODE_STATE_UNDEFINED
13
13:  };
14
14:  typedef enum gcode_handler_state_t_ gcode_handler_state_t;
15
15:
16
16:  /* initialize*/
17
17:  void gcode_handler_init();
18
18:  
19
19:  gcode_handler_type_t gcode_handler_classify(gcode_cmd_t *gcode_cmd);

Inhalt von command_buffer.h
1
 1:  #include "gcode_handler.h"
2
 2:  typedef struct {
3
 3:    uint8_t                       empty;
4
 4:    message_buffer_msg_source_t   source;
5
 5:    gcode_handler_type_t          type;
6
 6:    gcode_handler_state_t         state;
7
 7:    gcode_cmd_t                   gcode_cmd;
8
 8:  } command_buffer_cmd_t;
9
 9:
10
10:  uint8_t command_buffer_getNext(gcode_handler_type_t type, gcode_handler_state_t state, command_buffer_cmd_t *cmd);

Ich verwende als Entwicklungsumgebung das AVR Studio 5 (Version 5.1.208) 
mit der AvrGCC Version 5.1.0.0

Vielleicht kann mir jemand von euch bei dem Problem helfen.

Viele Grüße
Stroggi
#3005982
Lesenswert?

Das ist ein enum, der in einer anderen Datei "message_buffer.h" 
definiert wird:
1
  enum message_buffer_msg_source_t_ {
2
    MSG_SOURCE_TTYS0,         // serial interface
3
    MSG_SOURCE_TTYEXTDISPLAY, // interface of the graphic-display-card
4
    MSG_SOURCE_TTYINTDISPLAY, // interface of the hd44780-display
5
    MSG_SOURCE_SYSTEM         // internal message
6
  };
7
  typedef enum message_buffer_msg_source_t_ message_buffer_msg_source_t;

Also im Prinzip das gleiche Problem, aber das wird (noch) nicht 
angezeigt.
#3006021
Lesenswert?

So. Hier dann mal die entsprechenden Dateien. Die confg.h hab ich 
beschnitten!
1
Error  6  expected ')' before 'type'  H:\...\command_buffer.h  32  55
2
Error  5  expected specifier-qualifier-list before 'gcode_handler_type_t'  H:\...\command_buffer.h  22  5

Viele Grüße
Stroggi
Angehängte Dateien:
#3006058
Lesenswert?

Michael Strosche schrieb:
> So. Hier dann mal die entsprechenden Dateien.

Klasse, der echte Code ist in Bezug auf die Include-Logik also ganz 
anders, als dein Code im OP. Das zeigt mal wieder schön, wie sinnvoll es 
ist, Phantasie-Code zu posten statt dem Echten.

Wenn config.h inkludiert wird, wird dort command_buffer.h VOR 
gcode_handler.h eingebunden, also sind dort dann die Sachen aus 
gcode_handler.h noch nicht bekannt.
#3006090
Lesenswert?

Michael Strosche schrieb:
> Schön und gut, aber wenn es so eine simple das vor dem Sache wär, dann
> hätt ich bestimmt net hier gefragt, sondern wär selbst drauf gekommen.

Wie sieht überhaupt die C-Datei aus, bei deren Übersetzen der Fehler 
kommt? Wird dort direkt einer der spezifischen Header eingebunden, oder 
nur config.h (daraus ergeben sich unterschiedliche Reihenfolgen)? Was 
wird dort sonst noch eingebunden? Ist überhaupt uint8_t dort bekannt?

Ich habe jedenfalls keine große Lust mehr auf Raten.
#3006096
Lesenswert?

In den C-Dateien wird der dazugehörige header mit eingebunden. Also zur 
command_buffer.c gehört die command_buffer.h. Sonst wird dort nix 
eingebunden. Über die config.h in den entsprechenden header-dateien ist 
der Rest dann bekannt.
uint8_t ist natürlich bekannt, da in der config.h alle relevanten header 
(  avr/io.h, <stdint.h>, <string.h>, <avr/interrupt.h>, <util/delay.h>, 
<math.h>) VOR allem anderen eingebunden werden.

Des Weiteren habe ich meine Gründe den Code nicht vollständig zu posten, 
da die Logik hinter dem ganzen closed source ist (bzw. sein wird)!
#3006115
Lesenswert?

Michael Strosche schrieb:
> In den C-Dateien wird der dazugehörige header mit eingebunden. Also zur
> command_buffer.c gehört die command_buffer.h. Sonst wird dort nix
> eingebunden. Über die config.h in den entsprechenden header-dateien ist
> der Rest dann bekannt.

Womit du wieder eine wichtige Information ausgelassen hättest, nämlich 
bei welcher C-Datei denn nun der Fehler kommt. Ein letztes Raten von 
mir: es ist gcode_handler.c. Wenn du das mal schrittweise durchgehst, 
wirst du feststellen, dass dort command_buffer.h immer vor 
gcode_handler.h bearbeitet wird, egal welche Reihenfolge du in config.h 
angibst.

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