"previous declaration of" trotz #ifndef

dotti

Mitglied
Hallo,

Ich habe folgendes Problem,

Ich verwende eine LIB die diese zwei Definitionen beinhaltet.

Jatzt hab ich diese Definitionen folgender maßen in mein Programm übernommen:

Code:
#ifndef DWORD
typedef unsigned long DWORD;
#endif

#ifndef BOOL
typedef int BOOL;
#endif

Trotz der #ifndef BOOL Anweisung bekomme ich folgende Fehlermeldung

Code:
In file included from KopplungSMA.c:17:
Programm.h:26: error: redefinition of typedef âDWORDâ
./LIBs/lib_yasdi-1-7-2-src/smalib/smadef.h:60: error: previous declaration of âDWORDâ was here
Programm.h:30: error: redefinition of typedef âBOOLâ
./LIBs/lib_yasdi-1-7-2-src/smalib/smadef.h:68: error: previous declaration of âBOOLâ was here
make[1]: *** [KopplungSMA.o] Error 1

Eigentlich sollte das #ifndef das doch verhintern oder?


mfg


Klaus D.
 
Hi.

Du vermischst verschiedene Dinge miteinander. Ein typedef ist ein neuer Alias/Name für einen vorhanden Typ. Und dann gibt es noch Präprozessormakros.

Präprozessormakros erstellt man mit #define. Diese kann man dann auch mit #ifndef auf Nicht-Existenz prüfen.

Bei typedefs ist das nicht der Fall. Allerdings ist es in C++ (nicht in C!) erlaubt ein typedef mehrfach zu definieren, vorrausgesetzt es wird für ein und derselbe Typ ein Alias definiert:
C++:
typedef unsigned int uint;

typedef unsigned int uint; // in C++ OK!

typedef unsigned long uint; // Konflikt zu vorheriger Definition.
Gruß

\edit: Du könntest ja stattdessen wirklich Präprozessormakros verwenden:
C:
#ifndef BOOL
#define BOOL int
#endif
 
Zuletzt bearbeitet:
Hallo deepthroat,

Danke dir für die super schnelle Hilfe,
so in etwa hatte ich das schon fast vermutet.

mfg


Klaus D.
 
Zurück