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.


Anmelden zum Antworten