Include-Problem
-
Servus,
ich habe ein kleines Programm geschrieben, dass aus drei Klassen besteht. Wenn ich das Projekt erstellen möchte, bekomme ich immer die Fehlermeldung:
c:\programme\microsoft visual studio\vc98\mfc\include\afxv_w32.h(14) : fatal error C1189: #Fehler : WINDOWS.H already included. MFC apps must not #include <windows.h>
In den Projekteinstellungen habe ich die Option "MFC in einer gemeinsam genutzten DLL verwenden" ausgewählt. (Habe ich schon andere Einstellungen ausprobiert)
Ich poste hier mal die Headerdateien.
#ifndef CONTROL_H #define CONTROL_H #include "rs232.h" #include "dateiHandler.h" #include <afxmt.h> class Control{ DateiHandler* dh; RS232* rs; bool stop; static UINT manage(LPVOID param); public: Control(); ~Control(); void start(); }; #endif
#ifndef DATEIHANDLER_H #define DATEIHANDLER_H #include <iostream> #include <fstream> #include <string> #include <sstream> #include <afx.h> class DateiHandler{ CFile input; CFile output; CFile *inputDuplicate; CTime lastModification; CFileStatus opusStatus; DWORD lastFileLength; DateiHandler(); ~DateiHandler(); bool writeData(float f); bool getCopieOfOpusFile(std::string &line); friend class Control; }; #endif
#ifndef RS232_H #define RS232_H #include <windows.h> #include <string> #include <iostream> class RS232{ HANDLE rs_handle; DCB dcb; std::string name; RS232(); static RS232* rs232; DWORD dwEvtMask; public: float readTemperatur(); static RS232* getInstance(); ~RS232(); bool init(); }; #endif
Kann mir jemand helfen??
-
Was passiert, wenn du diese Zeile auskommentierst?
#include <windows.h>
-
Du mußt unterscheiden zwischen der Bibliothek (LIB bzw. DLL - wird je nach Projekteinstellungen eingebunden) und dem Header (H - wird mit include eingefügt) - dein Compiler will den Header nicht doppelt eingebunden haben, weil die MFC ihn schon irgendwo verwendet, deshalb beschwert er sich.
Btw, du scheinst dort etwas falsch herum eingebunden zu haben - "dateiHandler.h" benötigt die Deklarationen aus deiner "Control.h", nicht umgekehrt.
-
Also wenn ich
#include <windows.h> auskommentiere, dann funktioniert die Klasse RS232 nicht mehr, da ich dort auf Sachen wie HANDLE usw. zugreife.Das mit der Include-Reihenfolge von Control.h und DateiHandler.h verstehe ich nicht. Die Klasse Control greift auf die Funktionen von DateiHandler zu, wieso dann andersrum includieren.