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

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

1

01.11.2008, 13:04

Struktur per Parameter übergeben

Hallo,
könnt ihr mal bitte helfen ich stehe gerade voll auf dem Schlauch.
Es geht um ein kleines Spiel in C++.

Also es gibt nun eine globale Struktur (Dirty! Ich weiss ) mit globalen Instanzen nun wird in der main eine Zufallszahl wie folgt zugewiesen:


C-/C++-Quelltext

1
 Zufall2.Zufallzahl=(rand ()%10)+1;





Jetzt muss das aber als Kopie in 2 andere Funktionen.
Es muss auf jedenfall eine Kopie sein also keine Zeiger.

Wie mach ich das?

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

01.11.2008, 13:10

C-/C++-Quelltext

1
2
3
4
5
6
class foo { ... }

//hier als kopie

function bla(foo oInstance)
{
}


suchst du sowas?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

3

01.11.2008, 13:10

Was soll kopiert werden? Die Zufallszahl, oder die Struktur?
Struktur kannst du ganz einfach kopieren. (Sofern eine flache Kopie reicht, sprich du nichts mit new anforderst, oder Zeiger drin stehen hast)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct foo
{
int x;
int y;
};
...

foo f;
foo b;

f.x = 2;
f.y = 5;
b = f; //geht


b.x = (rand ()%10)+1;
f.x = b.x; // vlt. meinst du das


int t = (rand ()%10)+1;

b.x = t; // oder das..

f.x = t;


Ich hoffe, ich habe irgendwo ins schwarze getroffen. :)

4

01.11.2008, 13:12

Wenn ich dich richtig verstehe, dann ist das ganz einfach:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct SRand
{
int Zufallszahl;
};

void f(int i)
{
//...

}

void g(SRand rand)
{
//...

}

int main()
{
SRand zufall;
zufall.Zufallszahl = 5;

f(zufall.Zufallszahl);
g(zufall);
}


Die erste Funktion nimmt die Zufallszahl, die zweite eine ganze Instanz.

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

5

01.11.2008, 13:14

Hmm naja ich suche was damit ich in einer anderen Funktion z.b das so schreiben kann:


C-/C++-Quelltext

1
if(Zufall2.Zufallzahl==3)


Ich weiss nicht wie ich das beschreiben soll ich hoffe ihr wisst was ich meine.

edit: @defaultplayer^^ das ist glaub ich was ich suche. Werds mal probieren. Danke

6

01.11.2008, 13:30

Und wieso geht das nicht mit folgendem?

C-/C++-Quelltext

1
Zufall2.Zufallzahl=(rand ()%10)+1;

Es wäre noch hilfreich, wenn du dein Problem ein wenig genauer beschreiben könntest. Bis jetzt waren die Antworten nämlich mehr oder weniger Spekulation.

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

7

01.11.2008, 13:42

Naja also ich ermittel in der Mainfunktion eine Zufallszahl.

C-/C++-Quelltext

1
Zufall2.Zufallzahl=(rand ()%10)+1;


Nun muss ich das aber auch so in 2 anderen Funktionen verwenden können. Damit ich dann auch in Funktion 2 schreiben kann

C-/C++-Quelltext

1
if(Zufall2.Zufallzahl=(rand ()%10)+1;=10)


Ich weiss nicht wie ich das jetzt ausdrücken soll.

Jedenfalls das von defaultplayer^^ ist das was ich gesucht habe.
Nur noch eine Frage. Dieses int i ist doch so eine Art Platzhalter oder?
Ich hab nun mehrere mit Parametern zu übergeben. Ist es egal ob ich jetzt i oder o oder was auch immer nehme?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

8

01.11.2008, 13:43

Um ev. ein bischen zum Allgemeinen Verständnis beizutragen.

Wenn du eine Funktion hast und die dann aufrufst und einen Wert übergibst, dann wird der IMMER kopiert, respektive das Objekt mit dem jeweiligen Wert initialisiert.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
void foo (int i)
{...}
..

foo ( 2 );
//da wird jetzt nichts anderes gemacht, als:

int i = 2; //natürlich in der Funktion, was gleichbedeutend ist mit:

int i ( 2 ); //Initialisierung eines Integers mit 2


Das ganze Verhält sich genau gleich bei Zeigern:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
void foop (int* i)
{...}

int n = 2;
foop ( &n );
//ist das gleiche, wie 

int* i = &n; //und:

int* i ( &n );


Merke bei den Zeigern, dass es sich um einen anderen Datentypen handelt, mit dem du arbeitest. Nämlich Zeiger auf Integer. Aber dieser Datentyp muss auch einen Wert bekommen, welcher ebenfalls kopiert werden muss.

Und zum Schluss das ganze noch mit einer Struktur:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
struct bar
{...};

void foos ( bar b )
{...}

bar a;

foos ( a );
//ist gleich:

bar b = a; // gleich:

bar b ( a ); // [1]


Man beachte aber, dass das mit der Zuweisung = Initialisierung lediglich bei der Deklaration gilt und auch nur, wenn ein entsprechender Konstruktor zur Verfügung steht.

Und wenn wir hier schon von Konstruktoren reden, dann darf natürlich auch der Verweis zum Kopierkonstruktor fehlen, den wir bei [1] in Aktion sehen. Und hier wirds auch gleich wieder interessant.
Aber um das ganze jetzt hier aufzuführen ist mir die Zeit zu schade, weil das bereits oft gemacht wurde. ;)
Darum gibts nur ein paar weiterführende Links zu dem Thema:

Wikipedia
http://tutorial.schornboeck.net/operatoren_ueberladung.htm
string-Beispiel von David_pb

9

01.11.2008, 19:46

Zitat von »"Errschaffer"«

Naja also ich ermittel in der Mainfunktion eine Zufallszahl.

C-/C++-Quelltext

1
Zufall2.Zufallzahl=(rand ()%10)+1;


Nun muss ich das aber auch so in 2 anderen Funktionen verwenden können. Damit ich dann auch in Funktion 2 schreiben kann

C-/C++-Quelltext

1
if(Zufall2.Zufallzahl=(rand ()%10)+1;=10)


Ich weiss nicht wie ich das jetzt ausdrücken soll.

Jedenfalls das von defaultplayer^^ ist das was ich gesucht habe.
Nur noch eine Frage. Dieses int i ist doch so eine Art Platzhalter oder?
Ich hab nun mehrere mit Parametern zu übergeben. Ist es egal ob ich jetzt i oder o oder was auch immer nehme?

Sofern die funktionen nach der ermittlung der zufallszahlaufgerufen werden, geht das doch, dafür ist die variable doch global und nicht innerhalb der funktion deklariert ;)

Werbeanzeige