Forum: PC-Programmierung Seltsamer Fehler in Windef.h. Kann jemand helfen?


von Baric (Gast)


Lesenswert?

Hallo zusammen,
ich benutze den BuilderC++ 6.0 um eine Embedded-Application zu 
simulieren. Es ging alles geht gut. Nach ein paar Änderung in der 
Embedded-App meldet der Compiler auf ein mal einen Fehler den ich nicht 
lokalisieren kann und zwar in der Windef.h wtypes.h winsmcrd.h. Es wäre 
schön wenn der Compiler den Fehler in meinen Source code zeigen konnte. 
Leider an Windef.h wo ich nichts ändern soll. Hat jemand eine Idee?
Danke für jede Hilfe.
Gruß
Baric

E2146 Bezeichner zur Vervollständigung der Deklaration erforderlich
E2146 zu Viele Typen in der Deklaration
an der Stelle wo die Datentypen neu definiert sind:

windef.h
....
....
#ifndef BASETYPES
#define BASETYPES
typedef unsigned long ULONG;
typedef ULONG *PULONG;
typedef unsigned short USHORT;
typedef USHORT *PUSHORT;
typedef unsigned char UCHAR;
typedef UCHAR *PUCHAR;
typedef char *PSZ;
#endif  /* !BASETYPES */

....
....

von Rolf M. (rmagnus)


Lesenswert?

Ohne jetzt jegliche Information über die Zielplattform oder dein 
Programm zu haben, fallen mir zwei Möglichkeiten ein:

1. Der Fehler ist in einem Header, der vor diesem eingebunden wurde und 
bringt den Compiler erst dort ins Stolpern. Sowas passiert gerne mal, 
wenn man ein Semikolon oder eine Klammer vergessen hat. Dann ist suchen 
angesagt.

2. Die genannten Datentypen sind bereits irgendwo anders definiert 
worden, und jetzt kollidieren diese Typdefinitionen.

von Baric (Gast)


Lesenswert?

Danke für den Hinweis.
Die 2te Möglichkeit ist ausgeschlossen da ich alle neu Definitionen von 
Datentypen bewusst vermieden hab.
Ist eher die 1te Möglichkeit. Ich werde alle Header durchsuchen 
hoffentlich finde ich was :-(

von Irgendwer (Gast)


Lesenswert?

3.) du hast irgendwo vergessen zuvor die windows.h einzubinden. Die 
genaue Reihenfolge ist hier nicht immer beliebig.
Die windef.h wird eigentlich eher nicht direkt im eigen Code 
eingebunden.

von Baric (Gast)


Lesenswert?

Ja. Tatsächlich es lag an windows.h. Weil der Compiler nicht die 
genauere Stelle gezeigt hat wo die Fehler verursacht wird, habe ich 
Modul für Modul compiliert bis der Fehler (nämlich E2146) aufgetaucht 
ist. Dort ist ein RTOS_Wrapper wo die Interttask-Kommunication für 
Windows bzw. Keil-RTX stattfindet. Mit dem Hinzufügen des Windows.h ist 
das Problem gelöst.
Vielen Dank an allen Beteiligten.
Gruß

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.