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

jonnesen

Frischling

  • »jonnesen« ist der Autor dieses Themas

Beiträge: 58

Wohnort: Brandenburg, Templin

Beruf: Schüler

  • Private Nachricht senden

1

02.09.2010, 21:06

Wie kann eine Klassen-Instanz (als Zeiger erzeugt) an eine Funktion übergeben werden?

Hallo liebe Gemeinde,

ich bin eben auf ein problem gestoßen was bisher noch nicht in meinem buch behandelt wurde und ich auch noch nie selber gehabt habe....
ich habe eine klassen instanz erzeugt und möchte diese anschließend an meine Funktion übergeben.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
....
    CPlayer *pSpielerliste = NULL;
    CPlayer *pGegnerliste = NULL;
    int Spieleranzahl=5;
    int Gegneranzahl=6;
    .....

      pSpielerliste = new CPlayer[Spieleranzahl];
       pGegnerliste = new CPlayer[Gegneranzahl];

    Frage_Spieler_Daten_Ab(pSpielerliste[], Spieleranzahl);     //-------------welcher wert soll hier im zeiger gespeichert werden?
                                                                                                        der zeiger ist doch schon initialisiert was soll nun hier in die parameterliste?
    return 0;
}

void Frage_Spieler_Daten_Ab(CPlayer *pSpielerliste[], int Spieleranzahl) 
{
    cout << "Bla Bla Bla" << endl;
}



Meine Frage sind nun:

1. Was muss am der markierten Stelle in die Parameterliste hinein?
2. Wenn ich einen Konstruktor für die Zeigererzeugung verwenden möchte wo kommen dann die (Level,Energie....) hin:

C-/C++-Quelltext

1
 pSpielerliste = new CPlayer(Level,Energie....)[Spieleranzahl];


ist das so richtig?





Ich hoffe ihr könnt mir helfen

GRUß Jonas

idontknow

unregistriert

2

02.09.2010, 21:21

C-/C++-Quelltext

1
2
3
CPlayer* pSpielerliste[Spieleranzahl];
for(int i = 0; i < Spieleranzahl; ++i)
    pSpielerliste[i] = new CPlayer(Level,Energie....);

jonnesen

Frischling

  • »jonnesen« ist der Autor dieses Themas

Beiträge: 58

Wohnort: Brandenburg, Templin

Beruf: Schüler

  • Private Nachricht senden

3

03.09.2010, 07:17

ja ok danke für die schnelle antwort aber

in meinem buch steht dass das so gemacht wird:

C-/C++-Quelltext

1
pSpielerliste = new CPlayer[Spieleranzahl];

das

C-/C++-Quelltext

1
 pSpielerliste[i] = new CPlayer(Level,Energie....);


kenn ich gar nicht
könntet ihr mir das bitte genauer erklären


GRUß Jonas

4

03.09.2010, 08:48

C-/C++-Quelltext

1
pSpielerliste[i] = new CPlayer(Level,Energie....);


GRUß Jonas
Gruß,

das bedeudet, dass eine Instanz der Klasse "CPlayer" erzeugt wird.
Die Instanz der Klasse wird auf den Heap gespeichert, d.h. wenn du aus dem Gültigkeitsbereich, wo Du diese Instanz angelegt hast, raus gehst (FunktionsEnde, oder Scope verlassen), wird NICHT die Instanz wieder gelöscht.
in "pSpielerliste[i]" wird dann nur der Zeiger gespeichert der auf die Position auf dem Heap zeigt, wo diese instanz liegt.

[/i]Hoffe das hat Dir etwas Licht ins dunkel gebarcht.
BtW: Natürlich kann man sowas nicht schreiben "pSpielerliste = new CPlayer(Level,Energie....);". Die Punkte müssen schon durchwas Sinnvolles ersetzt werden.

[Edit]
Oh, habe nochmal dein ErstPost gelsesn....
Wie man einen Zeiger einer Instanz an eine Funktion übergibt?
z.B.:

C-/C++-Quelltext

1
2
3
4
void myFunc(CSpieler* pSpieler)
{...}

myFunc(pSpielerliste[2]);  // <== das isses!!

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

5

03.09.2010, 09:21

Der Parameter sollte vom Typ CPlayer* sein. In C++ so definiert, das es der Zeiger zum ersten Element des Arrays ist.


Ansonsten beschaeftige dich mal mit std Containers, macht dich auf lange sich flexibler.

Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

6

03.09.2010, 14:35

Also ich glaube das geht so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
...
  Frage_Spieler_Daten_Ab(pSpielerliste, Spieleranzahl); //Fuktion aufrufen...
...

void Frage_Spieler_Daten_Ab(CPlayer *pSpielerliste, int Spieleranzahl) 
{
    cout << "Bla Bla Bla" << endl;
}


Mfg Harry222

7

03.09.2010, 16:42

Ja, außerdem kommt das dem Ausgangscode von jonnesen am nächsten.

Zitat

2. Wenn ich einen Konstruktor für die Zeigererzeugung verwenden möchte wo kommen dann die (Level,Energie....) hin:
Nirgends, das ist nur bei new möglich (dann mit runden Klammern hinter dem Typ), bei new[] nicht. Hier wird der default constructor aufgerufen.

Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

8

03.09.2010, 16:46

Das

C-/C++-Quelltext

1
 pSpielerliste[i] = new CPlayer(Level,Energie....);

muss man glaube übrigens auch nicht machen! Wenn doch, belehrt mich eines besseren! ;)

Mfg Harry222

9

03.09.2010, 17:00

Harry222 wer genau hinsieht erkennt, dass idontknow in seinem Codebeispiel den Listentyp von CPlayer* auf CPlayer* [] änderte.

Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

10

03.09.2010, 17:02

Achso!

Mfg Harry222

Werbeanzeige