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

28.05.2014, 22:02

Variablen in anderen Funktionen benutzen?

Hallo!
Ich habe ´ne Frage: wie kann ich eine Variable, die ich in einer Funktion definiert habe, in einer anderen Funktion (in einer anderen .cpp Datei) verwenden?
Achja, ich mache das mit C++.
LG BrainToPlay :)

2

28.05.2014, 22:10

Indem Du diese als Argument übergibst.

Zitat

Ich bin nicht der Messias.
Ich sage, du bist es, Herr. Und ich muss es wissen, denn ich bin schon einigen gefolgt.

https://bitbucket.org/bwbg

3

28.05.2014, 22:16

Da du es leider nicht genauer beschrieben hast, habe ich einfach mal ins blinde geraten... Guck mal:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
//A.hpp
void foo(int stuff);

//A.cpp
void foo(int stuff){/*Do stuff with stuff....*/}

//B.cpp
#include "A.hpp"
void bar()
{
    int the_stuff = 5;
    foo(the_stuff);
}


MfG
Check

4

28.05.2014, 22:54

Danke! Ich denke ich hab es verstanden ^^

5

28.05.2014, 23:32

Also richtig geraten? Wenn das nicht deine Frage beantwortet hat, mach das deutlich. ^^
Aber scheint ja geholfen zu haben.

MfG
Check

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

29.05.2014, 17:45

Der Vollständigkeit halber möchte ich noch dazu sagen dass es die Möglichkeit gibt globale Variablen zu benutzen. So kannst du eine Variable bestimmen und die ist von überall von deinem Code benutzbar. Aber nur weil es möglich ist heißt das nicht dass du die Dinger auch benutzen solltest. Wie gesagt hier geht es nur um die Vollständigkeit. Wirklich sinnvoll setzt man globale Variablen normal nicht ein. Das wird normal eher aus Faulheit gemacht. Willst du es vernünftig machen, so wähle den Weg der hier schon gezeigt wurde und übergebe die nötigen Variablen als Parameter an die Funktion.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

7

01.06.2014, 15:57

Betrachte diesen Post als sinnfrei, wenn dich das nicht interessiert, aber das ist oft die nächste Frage, die ich bekomme:

Wenn man eine Variable einer Funktion übergibt, ist das innerhalb der Funktion nicht unbedingt die Selbe! Kleine Veranschaulichung:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>

void foo(int something) {
    std::cout << "Adresse: " << &something << " Wert: " << something << std::endl;
}

int main() {
    int i = 5;
    std::cout << "Adresse: " << &i << " Wert: " << i << std::endl;

    foo(i);
    return 0;
}

Ausgabe würde so aussehen:

C-/C++-Quelltext

1
2
Adresse: 0xff8c8d7c Wert: 5
Adresse: 0xff8c8d40 Wert: 5


Die Adressen sind unterschiedlich - hier handelt es sich intern also um zwei Variablen, und nicht um eine. Das liegt daran, dass hier innerhalb der Funktion foo() eine Kopie der übergebenen Variable angelegt wird, die nach dem Beenden der Funktion wieder zerstört wird. Die Variable, die ich in der main()-Funktion übergebe, wird dabei nicht berührt(außer beim Anfänglichen Kopieren).

Bei den globalen Variablen wäre das wie zu erwarten nicht so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>

int i = 5;
void foo() {
    std::cout << "Adresse: " << &i<< " Wert: " << i<< std::endl;
}

int main() {
    std::cout << "Adresse: " << &i << " Wert: " << i << std::endl;
    foo();
    return 0;
}


Ergibt die Ausgabe

C-/C++-Quelltext

1
2
Adresse: 0x8050768 Wert: 5
Adresse: 0x8050768 Wert: 5

Die Variable ist hier tatsächlich zweimal die selbe.

Das Verhalten kann man mit der ersten Methode allerdings auch erreichen. Dazu übergibt man den Parameter als Referenz. Das macht man, indem man innerhalb der Parameterliste den Adress-Operator benutzt(&). Hier wird dann keine Kopie mehr erstellt, sondern ein Alias für die übergebene Variable angelegt. Würde ich innerhalb dieser Funktion also "something" ändern, würde ich damit auch rückwirkend die Variable aus der main()-Funktion[hier heißt sie "i"] ändern - es ist ja die selbe.

C-/C++-Quelltext

1
2
3
void foo(int &something) { // Hier wurde die Referenz eingefügt
    std::cout << "Adresse: " << &something << " Wert: " << something << std::endl;
}


Damit würde man beispielsweise folgende Ausgabe erhalten:

C-/C++-Quelltext

1
2
Adresse: 0xff99ffe8 Wert: 5
Adresse: 0xff99ffe8 Wert: 5


Weiterführende Stichworte zu dem Thema sind: Scopes, Pass By Value und Pass By Reference
WIP Website: kevinheese.de

Werbeanzeige