Frage zur Header Dateien



  • Hallo,

    ich möchte eine variable in einer header datei deklarieren, sie in einer cpp datei "implementieren" und dann in der main ausführen. leider funktioniert das nicht so wie ich mir das vorstelle.

    Also hier mal mein code:

    main:

    #include <iostream>
    #include "var.h"
    
    using std::cout;
    using std::endl;
    using std::cin;
    
    int main()
    {
    
    	cout << a << endl;
    
    	return 0;
    }
    

    var.cpp

    #include <iostream>
    
    #include "var.h"
    
    a = 5;
    

    var.h

    #ifndef VAR_H_
    #define VAR_H_
    
    #endif /* VAR_H_ */
    
    extern int a;
    

    Kann mir jemand sagen, was ich da falsch mache? 😕

    danke & lg



  • Fehlermeldungen gibts nicht und dennoch weißt du dass es "nicht geht"? 🙄
    Zudem bringt dir

    #ifndef VAR_H_
    #define VAR_H_
    
    #endif /* VAR_H_ */
    

    nur was wenn dein Code VOR dem #endif und NACH dem #define steht



  • ok, danke mal, leider hat das keinen effekt...

    aber hier mal die fehlermeldung:

    Building file: ../src/var.cpp
    Invoking: GCC C++ Compiler
    g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/var.d" -MT"src/var.d" -o"src/var.o" "../src/var.cpp"
    ../src/var.cpp:6: Fehler: expected constructor, destructor, or type conversion before »=« token
    make: *** [src/var.o] Fehler 1
    

    lg



  • Jo, woher soll der compiler wissen was a ist? Schreib int davor



  • ok, danke. aber für was deklariere ich dann das a in der header datei? im prinzip könnte ich mir das dann ja sparen, oder?



  • Nein, weil sonst main.cpp das a nicht kennt



  • Du kannst das extern int a auch in main.cpp schreiben aber das ist nicht so hübsch und unübersichtlich.



  • ok, danke. jetzt hab ich das ganze auch mit einer einfachen void-funktion versucht, klappt alles. geht auch ohne das keyword "extern". kannst du mir nochmal kurz erklären für was das "extern" gut ist? seh ich heute ehrlich gesagt zum ersten mal.

    lg



  • Du deklarierst damit das du das a in var.cpp definierst.
    Wenn du das extern nicht schreiben würdest würde int a jedesmal definiert werden wenn du irgendwo #include"var.h" schreibst -> ein Fehler wäre dann sowas wie "multiple definition of... bla"
    Aber da du die #ifndef #define #endif machst im header sorgst du dafür dass das was zwischen endif und define steht nur 1 mal deklariert wird. Daher brauchst du es gar nicht wenn ich mich jetzt nicht irre?!
    (Sowas benutze ich nie da globale variablen unschön sind)

    BTW: kennst du unsing namespace std; ?



  • ah, ok danke jetzt ists mir klar. Ja, das using namespace std; kenn ich 😉


Anmelden zum Antworten