Include Problem



  • Hab ein eigenartiges Include Problem bei meinem Projekt:

    Klasse A

    #if !defined (CommonMicropross_h)
    #define CommonMicropross_h
    
    #if !defined(Bx1pMicropross_h)
        #include "Bx1pMicropross.h"
    #endif //!defined(Bx1pMicropross_h)
    
    #if !defined(PrelamData_h)
        #include "PrelamData.h"
    #endif //!defined(PrelamData_h)
    
    #if !defined(TpgmData_h)
        #include "TpgmData.h"
    #endif //!defined(TpgmData_h)
    
    #if !defined(MicroprossData_h)
        #include "MicroprossData.h"
    #endif //!defined(MicroprossData_h)
    
    #include <stdio.h>
    #include <iostream>
    #include <string>
    #include <windows.h>
    #include <stdlib.h>
    #include <fstream>
    #include <sstream>
    
    using namespace std;
    
    class CommonMicropross
    {
    ...
    }
    

    Klasse B

    #if !defined (Bx1pMicropross_h)
    #define Bx1pMicropross_h
    
    #if !defined(CommonMicropross_h)
        #include "CommonMicropross.h"
    #endif //!defined(CommonMicropross_h)
    
    #if !defined(GlobalData_h)
        #include "GlobalData.h"
    #endif //!defined(GlobalData_h)
    
    #if !defined(TpgmData_h)
        #include "TpgmData.h"
    #endif //!defined(TpgmData_h)
    
    #if !defined(OperatorData_h)
        #include "OperatorData.h"
    #endif //!defined(OperatorData_h)
    
    #if !defined(LotData_h)
        #include "LotData.h"
    #endif //!defined(LotData_h)
    
    #if !defined(TestData_h)
        #include "TestData.h"
    #endif //!defined(TestData_h)
    
    #if !defined(MicroprossResponseStructure_h)
        #include "MicroprossResponseStructure.h"
    #endif //!defined(MicroprossResponseStructure_h)
    
    #if !defined(TimeTest_h)
        #include "TimeTest.h"
    #endif //!defined(TimeTest_h)
    
    #include <stdio.h>
    #include <iostream>
    #include <string>
    #include <windows.h>
    #include <stdlib.h>
    #include <map>
    
    using namespace std;
    
    class Bx1pMicropross 
    {
    ...
    }
    

    Bekomme nun folgende Fehlermeldungen:

    commonmicropross.h(46) : error C2061: syntax error : identifier 'Bx1pMicropross'
    bx1pmicropross.h(69) : error C2061: syntax error : identifier 'CommonMicropross'
    

    Obwohl laut header Dateien alles eingebunden wurde !

    Hat jemand eine Ahnung was da falsch läuft ?!

    Danke und MfG

    leon



  • Fehlt in Klasse B nicht das schließende endif vom ersten if?



  • Du hast bei deinen beiden Header-Dateien einen sogenannten Cross-Include, d.h. die Dateien binden sich gegenseitig ein.
    Du mußt also dein Klassen-Design nochmals überarbeiten. Du solltest eine möglichst eindeutige hierarchische Struktur entwickeln.

    Generell verwendest du viel zu viele Includes in den Header-Dateien. Für Referenzen und Zeiger reichen Vorwärtsdeklarationen (forward declarations).

    Und für die Einbindung der Standard C++ IO-Klassen reicht

    #include <iosfwd>
    

    Nur die Source (CPP)-Dateien sollten dann die wirklich benötigten Header-Dateien einbinden.

    Je nach Compiler kannst du aber auch sog. "Vorcompilierte Header-Dateien" erzeugen lassen (so daß du nur an einer zentralen Stelle die häufig verwendeten Header-Dateien angibst.

    Die Einbindung von <windows.h> kann außerdem auch noch zu vielen weiteren Fehlern führen (wegen der Verwendung diverser Makros), d.h. diese sollte nur an expliziter Stelle verwendet werden (nicht für das gesamte Projekt).

    Und NIEMALS solltest du "using namespace std; " in Header-Dateien verwenden!!!
    Hierzu sollte es auch einen Thread in der FAQ geben...



  • Danke !

    Stichwort Vorwärtsdeklaration war die Lösung des Problems !

    mfg leon


Anmelden zum Antworten