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

m3xx

Alter Hase

Beiträge: 434

Beruf: Student

  • Private Nachricht senden

11

30.07.2015, 03:17

Du meinst ein Array das solche Objekte beinhaltet?
Naja, ein Array ist eigentlich nichts anderes als mehrere Zeiger.

Nehmen wir an, dein Array heißt "Beispiel"
Dann wären

C-/C++-Quelltext

1
Beispiel[2]

und

C-/C++-Quelltext

1
*(Beispiel + 2)

genau das Gleiche. Und ja beides funktioniert auch. Würde aber dennoch die erste Notation nutzen, da sie einfacher lesbar ist.
Lange Rede kurzer Sinn. Arrays sind eigentlich nur Pointer.

Zurück zu deinem Problem, unabhängig von deinem Beispiel:
angenommen du hast eine Funktion, die einen int-Pointer annehmen soll würde es so aussehen:

C-/C++-Quelltext

1
2
3
4
void foo(int* p)
{
  *p = 42;
}


Und was du übergibst ist dann deine Sache. Könntest entweder folgenden Ansatz verwenden:

C-/C++-Quelltext

1
2
3
int zahl = 0;

foo(&zahl);

oder doch so:

C-/C++-Quelltext

1
2
3
4
int zahl = 0;
int* pZahl = &zahl;

foo(pZahl);


Und ganz genauso funktioniert das Ganze auch mit Klassen.

12

30.07.2015, 05:52

C-/C++-Quelltext

1
void Basiswechsel(int &Basisnummer, CBasis &RestonaGuldon_Spieler, CBasis &KlendautKlendaut_Spieler, CBasis &AbsariLumos_Spieler, CBasis &HysskallMatras_Spieler)



C-/C++-Quelltext

1
Basiswechsel(Basisnummer0, RestonaGuldon_Spieler, KlendautKlendaut_Spieler, AbsariLumos_Spieler, HysskallMatras_Spieler);

Aktuell nutzt du es als Referenz, um das auf Pointer umzustellen:

C-/C++-Quelltext

1
2
3
4
5
void Basiswechsel(int* Basisnummer, CBasis* RestonaGuldon_Spieler, CBasis* KlendautKlendaut_Spieler, CBasis* AbsariLumos_Spieler, CBasis* HysskallMatras_Spieler);

Basiswechsel(&Basisnummer0, &RestonaGuldon_Spieler, &KlendautKlendaut_Spieler, &AbsariLumos_Spieler, &HysskallMatras_Spieler);

// nutzen der Pointer dann nicht mehr über Blabla.Irgendwas sondern Blabla->Irgendwas


Steht aber soweit alles in den vorherigen Beiträgen stehen.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Korowai

unregistriert

13

30.07.2015, 06:23

Habe den ersten Versuch gestartet, ein array als Referenz zu übergeben.
COmpiler meldet "expected identifier before '(' token:

Hier die void, die die Meldung auslöst:

void Basiswechsel(int &Basisnummer0, (CBasis (&RestonaGuldon_Spieler)[4]), ...)

Dazu der Aufruf:

Basiswechsel (Basisnummer0, RestonaGuldon_Spieler[4], ...)

und der Ausschnitt der main():

CBasis RestonaGuldon_Spieler[4];


...


NACHTRAG: Die Klammer um die Klassendeklaration in void war zuviel. Aber der Aufruf der void stimmt auch nicht... ???

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Korowai« (30.07.2015, 06:35)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

30.07.2015, 07:21

Mit RestonaGuldon_Spieler[4] übergibst Du nur eine CBasis, nämlich die an Index 4. Den gibt es übrigens gar nicht, sondern nur die Indices 0 bis 3. Wenn Du alle übergeben willst, lass den Index-Zugriff weg. Allerdings steht das auch in jedem ordentlichen Buch oder online-Tutorial deutlich ausführlicher erklärt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Korowai

unregistriert

15

01.08.2015, 09:32

Habe folgende Fehlermeldung des COmpilers:

"too many arguments to function void Fuhrpark(...)"

Der Code, im augenblicklichen STand meiner Kenntnisse:

Quellcode

1
2
3
4
5
6
7
8
9
//Funktionsaufruf
Basiswechsel (SchuerferSpieler0);

//Funktion (steht vor main)
void Fuhrpark (Schuerfer (SchuerferSpieler0[]))

//Array in der main, das eine Klasse in ein Array packt

Schuerfer SchuerferSpieler0[3];


Ich habe keine Ahnung, was fehlt, meine BÜcher und das Netz geben nichts her, dass ich verstehe oder verwenden kann, wäre toll, jemand hilft mir weiter

16

01.08.2015, 12:15

Versuchs mal mit "void Fuhrpark (Schuerfer SchuerferSpieler0[])", ohne die Klammern um SchuerferSpieler0[]

Korowai

unregistriert

17

01.08.2015, 17:56

Hab ich versucht. GIng nicht.

Ich habe jetzt eine Lösung, von der ich nicht weiß, ob es stimmt, weil ich eine andere Fehlermeldung bekomme (siehe parallelen thread...)

Werbeanzeige