Problem mit Includes

OP #2155752
Lesenswert?

Hallo,

ich habe ein Problem mit Typdefinitionen in Header-Files:

In meinem File uip_UdpAppHub.h definiere ich einen neuen Typ namens 
UdpAppData_t:
1
typedef struct UdpAppData_t
2
{
3
  struct UdpAppData_t *prev;
4
  struct UdpAppData_t *next;
5
  
6
  enum UdpAppData_e type;
7
  uip_ipaddr_t ip;
8
  union
9
  {
10
    nbt_name_query_t nbt_name_query;
11
  } data;
12
} UdpAppData_t;

Der Compiler meckert über folgende Zeile: uip_ipaddr_t ip; 
folgendermaßen:
1
Error  1  expected specifier-qualifier-list before 'uip_ipaddr_t'

Allerdings ist die Datei uip.h, in der der Typ uip_ipaddr_t definiert 
ist, korrekt eingebunden. Dort wird uip_ipaddr_t folgendermaßen 
definiert:
1
typedef u16_t uip_ip4addr_t[2];
2
typedef u16_t uip_ip6addr_t[8];
3
#if UIP_CONF_IPV6
4
typedef uip_ip6addr_t uip_ipaddr_t;
5
#else /* UIP_CONF_IPV6 */
6
typedef uip_ip4addr_t uip_ipaddr_t;
7
#endif /* UIP_CONF_IPV6 */

In meinem Fall ist UIP_CONF_IPV6 nicht definiert. Ich verstehe den 
Fehler nicht, denn überall sind Include-Guards und alles müsste korrekt 
eingebunden sein. Als IDE verwende ich das neue AVR Studio 5 - liegts 
vielleicht daran? Ich habe mal das Projekt als Anhang eingefügt.

Ich hoffe ihr könnt mir einen Tip geben.

Gruß und frohe Ostern. Sven
Angehängte Dateien:
Gast #2155809
Lesenswert?

Auch als typedef?

Der Fehler liegt nicht bei uip_ipaddr_t sondern davor. Der Fehler heißt 
ja:
 Fehler 1 erwartet Spezifizierer-Qualifikationsspiel-Liste vor 
uip_ipaddr_t
Also liegt es an deinem enum.
OP #2155855
Lesenswert?

Ich habs jetzt nochmal so (s.u.) getestet, geht auch nicht. Wenn ich 
übrigens die Zeile, wo gemeckert wird, auskommentiere, funktionierts. 
Liegt also schon an der Zeile!
1
typedef enum UdpAppData_e
2
{
3
  NBT_NAME_QUERY = 0
4
} UdpAppData_e;
5

6
typedef struct UdpAppData_t
7
{
8
  struct UdpAppData_t *prev;
9
  struct UdpAppData_t *next;
10
  
11
  UdpAppData_e type;
12
  uip_ipaddr_t ip;
13
  union
14
  {
15
    nbt_name_query_t nbt_name_query;
16
  } data;
17
} UdpAppData_t;
#2155897
Lesenswert?

Sven S. schrieb:
> Allerdings ist die Datei uip.h, in der der Typ uip_ipaddr_t definiert
> ist, korrekt eingebunden. Dort wird uip_ipaddr_t folgendermaßen
> definiert:

"korrekt" ist ein sehr dehnbarer Begriff.

uip_ipaddr_t ist tatsächlich in uip.h definiert, allerdings wird
schon vorher ein #include "uipopt.h" gemacht, und darüber indirekt
uip_UdpAppHub.h eingefügt.
Darin wird dann uip_ipaddr_t benötigt, ist aber zu diesem Zeitpunkt
noch gar nicht definiert (das käme in uip.h ja erst lange nach den
#includes).

Daß in uip_UdpAppHub.h wiederum vor der Verwendung von uip_ipaddr_t
ein #include "uip.h" steht, was den Typ ja definieren würde, ist
nett gemeint, aber hilft leider nicht - schließlich ist ja weiter
oben schon der Anfang von uip.h durchlaufen und durch die
Includeguards (#ifndef _UIP_H_ ... #define _UIP_H_ ...)
die zweite Verwendung stillgelegt.

Peter II schrieb:
> test mal mit

hilft nix.

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