Problem mit mehrfach eingebundener Header-Datei / Globale Variablen [gelöst]



  • Hallo,

    Ich weiß nicht wie ich bei mehreren .cpp dateien globale Variablen definieren kann. Habe 2 Header-File und 2 Sourcefiles.
    Mein Code sieht so aus:

    firstheader.h

    #ifndef FIRST_H
    #define FIRST_H
    #pragma once
    
    #include <stdio.h>
    #include "secondheader.h"
    
    int global_var=10;
    
    #endif
    

    secondheader.h

    #ifndef SECOND_H
    #define SECOND_H
    #pragma once
    
    void funktion(void);
    
    #endif
    

    Winmain.cpp

    #include "firstheader.h"
    
    void main()
    {
    	funktion();
    	printf("global_var= %d\n",global_var);
    	getchar();
    }
    

    funktion.cpp

    #include "firstheader.h"
    
    void funktion(void)
    {
    	printf("global_var= %d\n",global_var);
    }
    

    Das Problem ist nur, dass ich nicht weiß wo, ich die Globale Definition int global_var=10; hinschreiben darf.

    Der Fehler lautet:

    error LNK2005: "int global_var" (?global_var@@3HA) ist bereits in winmain.obj definiert.
    fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.
    


  • 1. mach doch aus der function.cpp ne function.h und binde die in deine winmain ein.

    2. kannst du doch aus der einen .cpp-datei auf die Variable aus der anderen .cpp-datei zugreifen!



  • MichelM schrieb:

    1. mach doch aus der function.cpp ne function.h und binde die in deine winmain ein.

    2. kannst du doch aus der einen .cpp-datei auf die Variable aus der anderen .cpp-datei zugreifen!

    Das löst nicht sein Problem, sondern krempelt sein Programm auf ungewollte Weise um.

    @posi90:

    Variante 1:

    Pack die Globale nicht in den Header, sondern in eine cpp-Datei. In der anderen cpp-Datei kannst du die mit dem extern-Schlüsselwort deklarieren und dann darauf zugreifen.

    Vaiante 2:

    Lass das mit den Globalen! Die machen oft nur Ärger. Arbeite stattdessen lieber mit Funktionsparametern, um Werte weiterzureichen.



  • Super, jetzt funktionierts 🙂

    Habs mal mit dem extern probiert. Wieder was dazugelernt ^^

    Danke!



  • posi90 schrieb:

    Super, jetzt funktionierts 🙂

    Habs mal mit dem extern probiert. Wieder was dazugelernt ^^

    Danke!

    Schön, das es funktioniert. Aber eigentlich ist Variante 2 die bessere. Wenn in einer Funktion ein Wert gebraucht wird, dann übergibt man ihn per Funktionsparameter. Vielleicht willst du das ja auch noch mal ausprobieren.


Anmelden zum Antworten