Variable in andere Header Datei laden



  • Hallo Leute, ich versuche mich im Moment ein wenig in CPp einzuarbeiten und das am Beispiel eines kleinen Verschlüsselungsprogramms.

    Ich habe diverse Funktionen und diese zu Übungszwecken jeweils in drei verschiedenen Header-Dateien.
    also
    in A.h die fkt A();
    in B.h die fkt B();
    in C.h die fkt C();

    jetzt ist beispielsweise in A.h die Variable VarA global definiert. Wie kann ich diese Variable VarA in B.h nutzen.

    Entweder weiß ich nicht die Fahcbegriffe oder es schein wohl nicht üblich zu sein, denn google ändert meine Suchanfrage dahingehend, als dass ich die gloable Variable zwar Funktionsübergreifend nutzen kann, aber nicht Headerdateien übergreifend.

    Ich habe auch schon versucht mit dem Befehle "extern" zu arbeiten. Wenn ich das richtig verstanden hatte, sollte ich somit die Variable auch in einer anderen Headerdatei nutzen können. Stimmt das? Und wo schreibe ich "extern" rein?`Dort wo ich die Variable deklariere, also VarA in A.h oder dort wo ich sie einfüge/importiere bzw. u.a. auch nutzen möchte, das wäre B.h.

    Oder gibt es evtl einen ganz anderen weg?

    Gruß
    Pluxyy



  • Globale Variablen sind doof. Richtig doof sind aber in Headerdateien definierte Variablen, denn das bedeutet, dass du den Header nur in einer cpp-Datei einbinden kannst, was eine Headerdatei ziemlich überflüssig macht. Wenn du also unbedingt globale Variablen benutzen möchtest, musst du sie in einer cpp-Datei definieren und ansonsten extern deklarieren. Das kann auch durch einbinden einer Headerdatei geschehen, die eine extern Deklaration enthält.



  • Wieso packst du nicht einfach den ganzen Code in eine cpp Datei, bei so einem kleinen Programm sind Header ziemlich unnötig.



  • Ja, globale Variablen sind doof. Wenn Du sie wirklich trotzdem brauchst, dann musst Du sie im Header mit extern forward deklarieren:
    A.h:

    #ifndef A_H
    #define A_H
    
    void A();
    
    // Deklaration von VarA
    extern int VarA;
    
    #endif
    

    A.cpp:

    // und hier die Definition von VarA:
    int VarA = 42;
    
    void A()
    {
      ++VarA;
    }
    

    B.h:

    #ifndef B_H
    #define B_H
    
    void B();
    
    #endif
    

    B.cpp:

    void B()
    {
      --VarA;
    }
    

    main.cpp:

    #include "A.h"
    #include "B.h"
    #include <iostream>
    
    int main(int argc, char* argv[])
    {
        std::cout << "Wert von VarA: " << VarA << std::endl;
    
        A();
    
        std::cout << "Wert von VarA nach Aufruf von A(): " << VarA << std::endl;
    
        B();
    
        std::cout << "Wert von VarA nach Aufruf von B(): " << VarA << std::endl;
    }
    

    Übrigens wollte ich nochmal daran erinnern, dass globale Variablen doof sind.

    Ich habe hier Linux und im Terminal übersetze ich das mit:

    g++ -o a A.cpp B.cpp main.cpp
    

    und rufe das dann mit ./a auf.

    Habe ich eigentlich schon gesagt, dass globale Variablen doof sind? Wenn ja, dann schadet das nicht, das nochmal in Erinnerung zu rufen. Man könnte es ja sonst vergessen 🤡 .



  • Bitmapper schrieb:

    Wieso packst du nicht einfach den ganzen Code in eine cpp Datei, bei so einem kleinen Programm sind Header ziemlich unnötig.

    Und wenn er dann ein großes Programm schreibt, hat er dasselbe Problem und steigt erst recht nicht durch.



  • Sind globale Variablen wirklich doof?

    Das hat in meinen Augen doch einen Vorteil, wenn man einige Konstanten hat, die sich den ganzen Programmablauf gar nicht ändern können, diese nicht dauernd den Funktionen zu übergeben?



  • Variablen heißen Variablen, weil sie variabel sind.
    Das hat wenig mit Konstanten zu tun, die nunmal konastant sind.

    Aber es ist besser Konstanten an Funktionen zu übergeben. Das macht die Funktionen flexibler.
    (Mal abgesehen von Naturkonstanten)


Log in to reply