Seltsamer Compile-Error winnt.h
-
Hallo!
Ich hab einen seltsamen Compiler-Error. Wenn ich eine Klasse im Main-Cpp-File inkludiere, läuft er problemlos durch. Inkludiere ich diese Klasse aber in einer der anderen Header-Files im Projekt, bekomme ich folgenden Compiler-Fehler:
1>C:\Programme\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(285) : error C2143: syntax error : missing ';' before '*'
1>C:\Programme\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(285) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-intIch bin etwas ratlos, woran das liegen könnte. Hat jemand eine Idee?
Gruß,
Lemmy
-
Was ist denn das letzte, was du vor der winnt.h eingebunden hast? Dort fehlt offenbar ein Semikolon (ziemlich am Ende der Datei).
-
Hm. Ich verwende ein ImageIO-Framework von jemand anderem. Das seltsame ist, wenn ich die Headers für das ImageIO-Framework als erstes inkludiere, kommen keine Errors. Inkludiere ich davor aber andere Files, kommen die Fehler.
-
Was sind denn das für andere Dateien, die das Problem verursachen?
Das Problem an der Sache ist, daß der Compiler Fehler gelegentlich verschleppt. Das heißt, wenn du zum Beispiel (stark vereinfacht) so etwas stehen hast:
class klasse1 { ... } class klasse2 { ... };dann fällt erst in der Zeile 6 auf, daß da ein Semikolon fehlt. Und in großen Projekten stehen diese beiden Definitionen in verschiedenen Headern, die erst vom Präprozessor zusammengefasst werden - also fällt erst in der "klasse2.h" auf, daß am Ende von "klasse1.h" etwas fehlte.
-
Ja, aber wie kann es sein, dass er einmal ohne Fehler kompiliert und das Programm richtig läuft. Und wenn die Reihenfolge der Header-Files geändert wird, Compiler-Fehler kommen?
Mir scheint, dass es sich hierbei um einen VS-internen Fehler handelt.Ich glaube ich habe etwas gefunden:
Wenn ich in der Datei winnt.h (ab Zeile 254) folgendes ändere, funktioniert es auf einmal wieder://#ifndef VOID #define VOID void typedef char CHAR; typedef short SHORT; typedef long LONG; //#endifIch hab das #ifndef auskommentiert.
Diese o.a. typedefs werden in meinem Fall wohl nicht richtig geladen. Aber eigentlich will ich an winnt.h nix ändern. Das kanns ja nicht sein oder?
Gruß,
Lemmy
-
Nein, es ist ganz sicher ein Problem in dem Code, den du geschrieben hast. Das fehlende Semikolon in deinem Header wird (leider) erst am Anfang der nächsten Deklaration bemerkt, die sich zufällig im nachfolgenden Systemheader befindet. Zeig doch einfach mal den Header, der als letzter vor dieser ominösen IO-Bibliothek eingebunden wurde

-
bitte gerne...
Funktioniert:
#include <conio.h> #include "ImageSource.h" #include "RobustPCA.h"Funktioniert NICHT:
#include <conio.h> #include "RobustPCA.h" #include "ImageSource.h"Wenn ImageSource.h nicht an erster Stelle steht, kommt der Fehler. Es ist egal, welches Header-File ich davor stelle.
Ich glaube, wenn es irgendwo ein Strichpunkt-Fehler wäre, würde es in beiden Fällen nicht funktionieren oder?
-
Dann hast du deine Fehler sehr konsequent durchgehalten
Zeig doch mal die beiden dort angegebenen Header.
-
Und was passiert nun:
#include <conio.h> #include "RobustPCA.h" #include "ImageSource.h" ;IMHO braucht in RobustPCA nur ein trickreiches gültiges statement zu kommen, das einen Identifier oder eine Funktion korrekt wiedergibt und es geht.
Gib uns mal die letzten 20-40 Zeilen aus ImageSource.h