Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.03.2012, 17:26

"Über"-globale Variablen für mehrere Quelldateien möglich?

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 =/

valentin

Treue Seele

Beiträge: 212

Wohnort: Schweiz

Beruf: Schüler

  • Private Nachricht senden

2

18.03.2012, 17:35

Ka, obs ne schöne Lösung ist, allerdings dürfte das Stichwort "extern" sein, was du suchst.
Standardhinweis: Globale Variablen sollten nach Möglichkeit immer vermieden werden ;)
visit me on deviantArt!
http://v-alentin.deviantart.com/

There is no programming language, no matter how structured, that will prevent programmers from making bad programs. //Larry Flon

3

18.03.2012, 20:48

Generell sind globale Variablen eher nicht zu empfehlen und über mehrere Dateien noch weniger, aber wenn das wirklich die Aufgabenstellung ist... :huh:

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sound~Wave« (19.03.2012, 15:47)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

18.03.2012, 23:40

extern ist was du suchst, aber warum kannst du die fraglichen Werte nicht einfach als Parameter übergeben?

Werbeanzeige