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

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

1

17.06.2011, 22:52

[C++] Mehrere Return Werte?

Hallo Leute,

ich bin grade dabei, ein paar Klassen für mein spiel zu schreiben und da bin ich auf ein kleines Problem gestoßen. Ich müsste durch das Aufrufen EINER Funktion, drei Rückgabe-Werte erhalten. Ich weiß nicht direkt wie ich das machen soll, weshalb ich euch hier mal nen schönen Thread schreibe.^^

Hoffentlich könnt ihr mir mit meinem Problem helfen.

Mit freundlichen Grüßen


Jawaiica
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

17.06.2011, 23:01

Ich würd mein Design nochmal überdenken, wenn ich drei Rückgabewerte aus einer Funktion hab ;)

Spontan fallen mir aber zwei möglichkeiten ein:
1) Definier eine strukt mit drei Werten und gibt dann diese struct zurück

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct Werte
{
   int Wert1;
   string Wert2;
   float Wert3;
}

Werte tuwas()
{
   Werte w;
   w.Wert = 42;
   w.Wert2 = "Hallo Welt";
   w.Wert3 = 3.141f;

   return w;
}


2)
Benutz referenzen/zeiger als parameter und gib die werte entsprechend darein:

Quellcode

1
2
3
4
5
6
void Tuwas( int& wert1, string& wert2, float* wert3 )
{
   wert1 = 42;
   wert2 = "Hallo Welt";
   *wert3 = 3.141f;
}

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

3

17.06.2011, 23:11

Erst einmal danke für die schnelle Antwort.
Ich weiß leider nicht, wie ich das anders machen kann. Ich wollte eine Figur aus drei Shape's ( SFML ) machen und diese drei wollte ich, wenn ich eine Funktion aufrufe, anzeigen lassen. Naja dann werde ich das wohl so machen, dass ich die drei Shapes jedes mal einzeln aufrufe.^^ trotzdem danke, ich werde die Möglichkeiten später noch einmal brauchen.

MfG Jawaiica'
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

jokester

Treue Seele

Beiträge: 125

Wohnort: Mainz

  • Private Nachricht senden

4

17.06.2011, 23:11

3) std::(tr1::)tuple

C-/C++-Quelltext

1
2
3
4
std::tuple<int, std::string, float> foo()
{
    return std::make_tuple(42, "Hallo Welt", 3.141f);
}
"There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened" -- Douglas Adams.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »jokester« (17.06.2011, 23:25)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

5

17.06.2011, 23:20

Oder Array mit 3 Elementen, wenn es vom selben Typ ist.
Bei Pike geht sowas mit mixed.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Tim Ohliger

Frischling

Beiträge: 12

Wohnort: Solingen

Beruf: Schüler & Student

  • Private Nachricht senden

6

18.06.2011, 13:52

Wenn du drei Shapes zeichnen willst mit einer Funktion, dann mach doch etwas in der Art:

C-/C++-Quelltext

1
2
3
4
5
6
void drawShapes(sf::RenderWindow &wnd)
{
            wnd.draw(shape1);
            wnd.draw(shape2);
            wnd.draw(shape3);
}


Am besten dann schön in einer Klasse kapseln.

MfG Tim

Werbeanzeige