Forum: Compiler & IDEs Problem mit Includes


von Sven S. (schwerminator)


Angehängte Dateien:

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

von hubs (Gast)


Lesenswert?

> enum UdpAppData_e type;
Wird das Dingen irgendwo vorher definiert?

von Sven S. (schwerminator)


Lesenswert?

Ja, folgendermaßen:
1
enum UdpAppData_e
2
{
3
  NBT_NAME_QUERY = 0
4
};

von DirkB (Gast)


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.

von Sven S. (schwerminator)


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;

von Peter II (Gast)


Lesenswert?

test mal mit
1
typedef enum UdpAppData_e
2
{
3
  NBT_NAME_QUERY = 0
4
};

von Klaus W. (mfgkw)


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.

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.