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

13.05.2011, 20:13

[C++] Auf eine Variable mehrmals zugreifen

Nabend,


und zwar möchte ich gerne auf eine variable (int) zugreifen von mehreren Cpp Dateien, aber wie könnte ich das machen?
habe die variablen einfach in ne .h Datei geschrieben aber von da aus kann ich die nur einmal inkludieren.

Hat da jemand eine Lösung?


2

13.05.2011, 20:17

Du kannst, wenn du das wirklich willst, eine globale Variable anlegen (so wie du das anscheinend schon gemacht hast) und greifst dann mit Hilfe des Schlüsselwörtchen extern auf sie zu bzw. sagst deinem Compiler, dass es sich nicht um eine Neudeklaration der Variable handelt, sondern dass sie bereits in einer anderen .cpp existiert.
Globale Variable sind aber im Allgemeinen pfui, also überleg dir gut ob du sie wirklich brauchst und ob du es nicht anders und schöner machen kannst. Schließlich willst du C++ programmieren und das ist nunmal objektorientiert. ;)

Gruß
SaRu_

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

3

13.05.2011, 20:44

Wenn du die Variable global deklarieren willst muss die deklaration mit dem Schlüsselwort extern in eine Header die inkludiert wird oder direkt in die andere cpp.
header:

C-/C++-Quelltext

1
extern int foo;
irgendeine cpp Datei:

C-/C++-Quelltext

1
int foo;

Allerdings solltest du die Variable lieber als Parameter übergeben.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

4

13.05.2011, 20:46

C-/C++-Quelltext

1
2
3
4
1>GameMenu.obj : error LNK2005: "int kontostand" (?kontostand@@3HA) ist bereits in arbeit.obj definiert.
1>GameMenu.obj : error LNK2005: "int tag" (?tag@@3HA) ist bereits in arbeit.obj definiert.
1>GameMenu.obj : error LNK2005: "int uhrzeit" (?uhrzeit@@3HA) ist bereits in arbeit.obj definiert.
1>c:\users\tom\documents\visual studio 2010\Projects\Infinity_Life\Debug\Infinity_Life.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.


Dann kommt aber das...


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

5

13.05.2011, 20:58

C-/C++-Quelltext

1
int foo;
... darf nur in einer cpp Datei stehen.
Das ist gleiche wie bei Funktionen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

6

13.05.2011, 21:10

ich brauche das aber in 2 Dateien oder auch mehrere, wie kann ich das dann lösen?


7

13.05.2011, 21:20

Genau so wie das jetzt schon zweimal oben steht. Google doch einfach mal nach der Benutzung von "extern", dann findest du z.B. sowas.

Ach ja und nicht vergessen die paar Zeilen unter dem Beispiel zu lesen, das sagt eigentlich schon alles was du wissen musst.

Zitat

Regardless of the number of files, a global variable is only defined once, however, it must be declared in any file outside of the one containing the definition.


Gruß
SaRu_

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

8

13.05.2011, 21:47

Laut deinen Variablennamen sind das übrigens keine Variablen, für die sich eine globale Variable rechtfertigen lässt.
An deiner Stelle würde ich das Design nochmal überdenken.

9

13.05.2011, 21:55

Laut deinen Variablennamen sind das übrigens keine Variablen, für die sich eine globale Variable rechtfertigen lässt.
An deiner Stelle würde ich das Design nochmal überdenken.

Hättest du da vielleicht eine Idee wie ich das am besten lösen könnte?


Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

10

13.05.2011, 22:03

Wie NachoMan geschrieben hat: Einfach als parameter übergeben.

Werbeanzeige