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.
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.