Include-Problem bei voneinander abhängigen Headern



  • Hallo,
    mein Problem besteht darin, dass die einzelnen Header voneinander abhängen und somit kann nicht kompiliert werden:

    Hier exemplarisch nur zwei voneinander abhängige Dateien, in Wirklichkeit sind es mehrere.
    main.h (Hauptheader der Lib, inkludiert alle anderen Header)

    #pragma once
    
    #include <runtime.h> // Wird auch von a.h und b.h benötigt!
    #include <a.h>
    #include <b.h>
    

    a.h:

    #pragma once
    
    #include <main.h>
    
    class a
    {
    //
    };
    void func(a vA, b vB);
    

    b.h:

    #pragma once
    
    #include <main.h>
    
    class b
    {
    a InstanceOfA;
    //
    };
    

    MfG,
    Max

    Ps: Ich hoffe mir wird das #pragma once verziehen...



  • stichwort forward declaration...

    danns chreibst in main.h einfahc vorher noch class a; und class b;



  • Also erstmal solltest du runtime.h sowohl in a.h, als auch in b.h includen, wenn es von beiden gebraucht wird. Sonst muss ein Benutzer ja immer daran denken, vor a.h und/oder b.h runtime.h einzubinden.

    Statt/zusätzlich zu dem pragma once wären include guards nicht schlecht.

    Und in deiner konkreten Situation kannst du dein Problem auch nicht durch forward deklarationen lösen, weil für die Deklaration von Funktionsparameter (wenn per value übernommen wird) die Definition der Klasse bekannt sein muss, genau wie auch für die Deklaration von Member von Klassen.

    Du kannst das Problem mit forward deklarationen lösen, wenn du func die Argummente per (const) reference übernehmen lässt, was sowieso sinnvoll ist, je nachdem, wie groß deine Klassen sind.

    Felix


Anmelden zum Antworten