Global deklariert, aber trotzdem nicht benutzbar?



  • Also, ich habe bei meinem kleinen Programmn für alle Variablen die global deklariert werden müssen eine header Datei angelegt (ob das klug ist oder nicht ist ja egal).
    Und damit es übersichtlich bleibt habe ich 2 Quellcodedateien. Wenn ich jetzt in einer der beiden Dateien eine Varible global deklariere oder in der headerdatei deklariere und sie in einer der beiden Quellcodedateien include müsste ich die variable doch auch in beiden Quellcodedateien benutzen können oder? Funzt irgendwie nicht, und versuche ich die Variable noch mal in einer der beiden Dateien zu deklarieren gibts ne doppeldeklaration was ja auch logisch ist. Jemand ne Idee wie ich die Variablen in jeder Quellcodedatei ich dem projekt hinzufüge benutzen kann?

    mfg Frusciante²



  • Du darfst die Variablen in dem Header-File nur deklarieren aber nicht definieren, ansonsten hast du durch das Einbinden der Header-Dateien in den Cpp-Dateien jeweils eine statische Variable (sprich 2 anstatt der einen globalen). 😃

    Ansonsten würde ich dir empfehlen sie als Klassenvariablen zu deklarieren, dann schweben die Variablen nicht so frei im C++ Raum rum.



  • Funktioniert leider immer noch nicht. Bekomme immer folgenden Fehler:

    fight.obj : error LNK2005: "int exp" (?exp@@3HA) bereits in main.obj definiert
    Debug/main.exe : fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden

    Hätte auch nichts dagegen es ohne headerdatei zu machen. Aber warum kann ich die Variable nur in der Quellcodedatei benutzen in der sie deklariert wurde?

    mfg Frusciante²



  • bin mir net sicher, weil ich das net so oft mche, aber mir schwirrt das wort extern im kopf rum!



  • 😕 Was willst du mir mit dem wort extern sagen?



  • BCB Hilfe schrieb:

    Syntax

    extern <daten_definition> ;
    [extern] <funktions_prototyp> ;

    Beschreibung

    Der Modifizierer teilt dem Compiler mit, daß der Speicherplatz und der Initialisierungswert einer Variablen bzw. der Rumpf einer Funktion effektiv in einem anderen Quelltextmodul definiert wird.



  • // .h
    extern foo bar;
    
    // .cpp
    foo bar;
    

    In jeder ÜE, in der du bar brauchst, inkludierst du einfach die Header Datei.
    Zum Thema Deklaration bzw. Definition gibts auch einen Thread in den FAQ.


Anmelden zum Antworten