C++ class forward declaration



  • Hi Jungs,

    wie es der Titel schon andeutet habe ich eine Frage bezüglich der Vorwärtsdeklarationen von Klassen in C++. Vorweg erstmal ein Beispiel zu dem Problem:

    File tr_types.hpp:
    // Vorwärtsdeklarationen
    class A;
    class B;
    class C;
    
    File A.hpp:
    
    #include "tr_types.hpp"
    #include "B.hpp"
    #include "C.hpp"
    
    class A {
        ...
    
        public:
           B b;
           C c;
    
        ...
    };
    
    File A.cpp:
    
       #include "A.hpp"
       #include "D.hpp"
    
       void doSomething() {
           ...
           D d;
           ...
       }
    

    So nun zu der Frage :D, warum benötige ich hier für meine Klasse A Vorwärtsdeklartationen? Reicht die Inklusion der jeweiligen Header nicht aus?
    Und warum muss ich D.hpp in die A.cpp einbinden und nicht in die A.hpp? Ich dachte immer alles was ich in der Headerdatei includiere wird auch in der cpp-Datei eingebunden



  • HAWXthy schrieb:

    So nun zu der Frage :D, warum benötige ich hier für meine Klasse A Vorwärtsdeklartationen?

    Brauchst du doch garnicht.

    HAWXthy schrieb:

    Und warum muss ich D.hpp in die A.cpp einbinden und nicht in die A.hpp? Ich dachte immer alles was ich in der Headerdatei includiere wird auch in der cpp-Datei eingebunden

    Du benutzt D in A.cpp, also musst du in A.cpp den Header inkludieren. Wozu solltest du den Header in A.hpp inkludieren? Ich sehe da nirgends ein D.



  • Liest mal den Artikel hier durch.



  • Ok danke^^, wieder etwas dazu gelernt^^. Die Sache war mir nicht ganz so klar 😃



  • Ich habe noch eine weitere Frage zu den Vorwärtsdeklarationen^^. Wie sieht es aus, wenn ich einen Vorwärtsdeklaration mit einem namespace machen möchte? Beispielsweise geht class A; ohne namespace jedoch mit class A:🅱:c wiederum nicht.



  • Öffne den namespace einfach und schliesse ihn dann wieder.

    namespace A
    {
     namespace B
     {
      class C;
     }
    }
    


  • Ok danke^^


Anmelden zum Antworten