Frage zu #include



  • Hallo,

    in meinem Projekt benutze ich jede Menge globale Variablen. Aus diesem Grund möchte ich sie irgendwo zentral ablegen - ich habe dazu eine neue Header-Datei (globals.h) generiert und alle meine globalen Variablen dort hinein geschrieben.

    Wenn ich diese 'globals.h' in meinen CPP- und H-Dateien includiere, dann bekomme ich Fehler. Ich denke, das hat damit zu tun, dass 'globals.h' mehrfach aufgerufen wird und somit die globalen Variablen mehrfach deklariert werden.

    Ich habe bereits folgenden erfolglosen Veruch hinter mir:

    //globals.h
    #ifndef __GLOBALS_H
    #define __GLOBALS_H

    int g_i;
    //und so weiter...

    #endif

    Es hat wie gesagt nicht funktioniert...
    Weiss jemand Rat?

    Vielen Dank im Voraus



  • Wenn ich diese 'globals.h' in meinen CPP- und H-Dateien includiere, dann bekomme ich Fehler.

    schön wäre es, wenn du uns auch erzählst was für Fehler du bekommen hast. Ich hab ja meine Kristallkugel zur Zeit in Reperatur..



  • Wenn der Fehler heissen sollte: Variable blablalba defined in both modules...
    (ok, ist eigentlich ne Warnung vom Linker), versuch mal die Suchfunktion, da gab es schon einige Fragen zu, und auch schon die Lösung



  • Das Problem tritt bei globale Struktur-Variablen auf:

    //globals.h
    #ifndef __GLOBALS_H
    #define __GLOBALS_H

    int g_i;
    typedef struct
    {
    HWND hWnd;
    bool bThreadFlag;
    }_ThreadPkg;

    //weitere Variablen

    #endif

    Die Fehlermeldungen tauchen nur bei mehrmaligen Includieren der globals.h-Datei auf und lauten:
    E2303 Typname erwartet und
    E2139 In Deklaration fehlt ;

    Der Fehler taucht in Zeile >>HWND hWnd;<< auf.

    Hat jemand einen Tip? (mit oder ohne Kristallkugel 🙂



  • und wo sollte deiner Ansicht nach nun HWND definiert sein?

    -junix



  • HWND ist in windef.h definiert. Ich habe bereits windef.h in globals.h includiert, aber ich bekomme genau die selbe Fehlermeldung wie vorher beschrieben - allerdings taucht der Fehler diesmal in winnt.h (zeile 3387)

    Der Code sieht an dieser Stelle wie folgt aus:

    typedef struct _EXCEPTION_POINTERS {
    PEXCEPTION_RECORD ExceptionRecord;
    PCONTEXT ContextRecord;
    } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
    typedef PVOID PACCESS_TOKEN;
    typedef PVOID PSECURITY_DESCRIPTOR;
    typedef PVOID PSID;

    ...ich glaube ich gebe auf...


Anmelden zum Antworten