Wir sollen für unser Projekt mehrere Algorithmen ausprogrammieren, die dabei Werte aus zwei globalen Variablen auslesen und damit rumrechnen und am Ende die Lösung zurückgeben.
Da wir das ganze übersichtlich gestalten wollen, dachten wir, dass wir pro Algorithmus eine eigene Quelldatei und eine Headerdatei erstellen.
Das Problem ist aber nun folgendes: Die Quelldateien sehen die globalen Variablen nicht mehr. Binden wir die Header-Datei, die die globalen Variablen enthält mit ein, dann beklagt sich der Compiler, dass die Variablen mehrfach definiert wurden.
Hier das ganze im Quelltext vereinfacht dargestellt:
main.cpp:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <iostream>
#include <global.h> //Enthält die globalen Variablen
#include <algo_1.h>
//#include <algo_2.h> etc..
int main() {
std::cout << "Programm_start" << std::endl;
variable_a = 42;
variable_b = 13;
std::cout << algo_1() << std::endl;
std::cout << "Programm ende" << std::endl;
return 0;
}
|
global.h:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
#ifndef _GLOBAL_H
#define _GLOBAL_H
int variable_a = 0;
int variable_b = 0;
#endif
|
algo_1.h:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
|
#ifndef _ALGO_1_H
#define _ALGO_1_H
//#include "global.h" //geht nicht, da der Compiler sonst meckert, dass die globalen Variablen mehrfach definiert seien
//Zusätzliches Problem ist, dass es mehrere Algorithmen und somit Quelldateien gibt die die globalen Variablen benötigen
int algo_1();
#endif
|
algo_1.cpp:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
|
//#include "global.h" //geht nicht, da der Compiler sonst meckert, dass die globalen Variablen mehrfach definiert seien
//Zusätzliches Problem ist, dass es mehrere Algorithmen und somit Quelldateien gibt die die globalen Variablen benötigen
int algo_1() {
int loesung = 0;
loesung = variable_a + variable_b; //Zugriff auf die globalen Variablen aus global.h
return loesung;
}
|
Compiliert wird unter Linux mit: g++ -Wall -o out main.cpp algo_1.cpp ...
Gibt es globale Variablen die auch über mehrere Quelldateien gültig sind?
Bisher haben wir den Quellcode der Algorithmen direkt in die Headerdateien geschrieben. D.h. alle Algorithmen wurden vom Präprozessor in die Main.cpp eingegetragen, was aber nicht ganz Sinn der Sache ist.
Als Alternative stünde natürlich noch die Option alle globalen Variablen zu vermeiden, doch das wäre eig. die umständliche Notlösung in unserem Fall =/