<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[&amp;quot;dynamischen&amp;quot; Zeiger an Funktion weitergeben]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe mal eine Frage.</p>
<p>Und zwar schreibe ich ein Spiel mit SDL und C++ und bastele an einem Spiel a la<br />
Street Fighter in 2D.</p>
<p>Ich hatte mir das ganze jetzt so gedacht, dass der Spieler einen Kämpfer aussucht und von diesem dann ein Objekt erstellt wird.<br />
Also für jeden Kämpfer eine eigene Klasse, von dem gewählten wird ein Objekt erstellt und ein Zeiger darauf an die Grafikklasse, die jeden Frame zeichnet weitergegeben.</p>
<p>Meine Frage:<br />
Ich muss doch der Grafikklasse schon vorher mitteilen von welchem Typ Objekt der<br />
Zeiger ist, der benutzt wird, oder nicht?<br />
Ich weiß, das aber erst sobald der User seinen Kämpfer ausgesucht hat... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Jemand eine Idee, wie ich das am besten löse?</p>
<p>Bisschen Code:</p>
<pre><code class="language-cpp">Spieler *Spieler1 = NULL;
Grafik *Zeichnung = NULL;
Gegner *Gegner1 = NULL;

luchador_elegido1=luchador1;
luchador_elegido2=luchador2;

if (luchador_elegido1 == &quot;Benjamin&quot;)
    Spieler1 = new Benjamin(100,700);

if (luchador_elegido2 == &quot;Osito&quot;)
    Gegner1 = new Osito(700,700);

...
// hier die Zeichnungsfunktion im Main-Loop
// die beiden Zeiger auf die erstellten Objekte gehen hier rein
Zeichnung-&gt;update(screen,osito_vorne,hintergrund,Spieler1,Gegner1);

...
// aus der Zeichnungsfunktion selbst
// hier ist &quot;Benjamin&quot; jetzt als Klasse eingetragen, aber das kann sich
// ja beliebig ändern, je nachdem was der User wählt...
void Grafik::draw_spieler1 (SDL_Surface *screen, SDL_Surface *osito_vorne, SDL_Surface *hintergrund, Benjamin *Spieler1)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/253529/quot-dynamischen-quot-zeiger-an-funktion-weitergeben</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 16:56:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253529.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Nov 2009 18:13:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;quot;dynamischen&amp;quot; Zeiger an Funktion weitergeben on Tue, 03 Nov 2009 18:13:22 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe mal eine Frage.</p>
<p>Und zwar schreibe ich ein Spiel mit SDL und C++ und bastele an einem Spiel a la<br />
Street Fighter in 2D.</p>
<p>Ich hatte mir das ganze jetzt so gedacht, dass der Spieler einen Kämpfer aussucht und von diesem dann ein Objekt erstellt wird.<br />
Also für jeden Kämpfer eine eigene Klasse, von dem gewählten wird ein Objekt erstellt und ein Zeiger darauf an die Grafikklasse, die jeden Frame zeichnet weitergegeben.</p>
<p>Meine Frage:<br />
Ich muss doch der Grafikklasse schon vorher mitteilen von welchem Typ Objekt der<br />
Zeiger ist, der benutzt wird, oder nicht?<br />
Ich weiß, das aber erst sobald der User seinen Kämpfer ausgesucht hat... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Jemand eine Idee, wie ich das am besten löse?</p>
<p>Bisschen Code:</p>
<pre><code class="language-cpp">Spieler *Spieler1 = NULL;
Grafik *Zeichnung = NULL;
Gegner *Gegner1 = NULL;

luchador_elegido1=luchador1;
luchador_elegido2=luchador2;

if (luchador_elegido1 == &quot;Benjamin&quot;)
    Spieler1 = new Benjamin(100,700);

if (luchador_elegido2 == &quot;Osito&quot;)
    Gegner1 = new Osito(700,700);

...
// hier die Zeichnungsfunktion im Main-Loop
// die beiden Zeiger auf die erstellten Objekte gehen hier rein
Zeichnung-&gt;update(screen,osito_vorne,hintergrund,Spieler1,Gegner1);

...
// aus der Zeichnungsfunktion selbst
// hier ist &quot;Benjamin&quot; jetzt als Klasse eingetragen, aber das kann sich
// ja beliebig ändern, je nachdem was der User wählt...
void Grafik::draw_spieler1 (SDL_Surface *screen, SDL_Surface *osito_vorne, SDL_Surface *hintergrund, Benjamin *Spieler1)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1802815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802815</guid><dc:creator><![CDATA[Barcelona]]></dc:creator><pubDate>Tue, 03 Nov 2009 18:13:22 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;dynamischen&amp;quot; Zeiger an Funktion weitergeben on Tue, 03 Nov 2009 18:22:07 GMT]]></title><description><![CDATA[<p>Habe auch schon mal mit dem Gedanken gespielt ein Strassenkampf Spiel zu programmieren, da es das imo recht wenig gibt, also nur zu! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Zu deinem Problem:<br />
Das Zauberwort heisst hier Polymorphie. Sprich du leitest die Spieler von einer Klasse ab, und da drin hast du die allgemeingültige Schnitstelle, auf die du zugreifen kannst und dann je nach Laufzeit Typ die entsprechenden Funktionen aufrufen.</p>
<p>Das kannst du am besten in einem guten Buch nachlesen, oder mal für den Start hier:<br />
<a href="http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Polymorphie" rel="nofollow">http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Polymorphie</a></p>
<p>btw:<br />
Ich gebe hier aber zu bedenken, dass du für die Spieler besser nicht ein Haufen verschiedene Klassen machst. Denn, überleg mal, was die Gemeinsamkeiten und Unterschiede von den verschiedenen Spielern sind. Na? - Wohl sehr viele Gemeinsamkeiten und nur sehr wenige Unterschiede. Da wäre es doch besser eine allgemeingültige Klasse zu schreiben, welche dann über Parameter z.B die Stärke, Aussehen, verfügbare Attacken usw. gesteuert werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802821</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 03 Nov 2009 18:22:07 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;dynamischen&amp;quot; Zeiger an Funktion weitergeben on Tue, 03 Nov 2009 18:58:02 GMT]]></title><description><![CDATA[<p>Danke!</p>
<p>Also, wenn ich die Klasse &quot;Benjamin&quot; von einer allgemeinen Klasse &quot;Spieler&quot; ableiten würde, dann könnte ich an die Grafikfunktion einen Pointer &quot;Spieler&quot; weitergeben, auch wenn es sich dann während des Spielens um eine von dieser Klasse abgeleiteten Klasse handelt, korrekt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802834</guid><dc:creator><![CDATA[Barcelona]]></dc:creator><pubDate>Tue, 03 Nov 2009 18:58:02 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;dynamischen&amp;quot; Zeiger an Funktion weitergeben on Tue, 03 Nov 2009 19:30:56 GMT]]></title><description><![CDATA[<p>Wenn ich es mir recht überlege, müsste ich die Funktion der Grafikklasse<br />
&quot;überladen&quot;.<br />
Eine Funktion für jede Klasse Kämpfer in der Parameterliste...<br />
das müsste doch klappen,oder was meint ihr? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802859</guid><dc:creator><![CDATA[Barcelona]]></dc:creator><pubDate>Tue, 03 Nov 2009 19:30:56 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;dynamischen&amp;quot; Zeiger an Funktion weitergeben on Tue, 03 Nov 2009 19:50:54 GMT]]></title><description><![CDATA[<p>Problem bei meiner Idee mit &quot;Überladen&quot; der Funktionen:</p>
<p>Ich muss den Zeiger ja am Anfang deklarieren... der muss aber auch je nach Klasse, die gewählt wird, erstellt werden. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Und das Überladen bringt mich ja auch ins absolute Chaos... wenn ich 8 Kämpfer zu Auswahl gebe, muss ich ja eine Funktion für jede theoretisch mögliche Funktion schreiben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802865</guid><dc:creator><![CDATA[Barcelona]]></dc:creator><pubDate>Tue, 03 Nov 2009 19:50:54 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;dynamischen&amp;quot; Zeiger an Funktion weitergeben on Tue, 03 Nov 2009 21:02:35 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Habe auch schon mal mit dem Gedanken gespielt ein Strassenkampf Spiel zu programmieren, da es das imo recht wenig gibt, also nur zu! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Zu deinem Problem:<br />
Das Zauberwort heisst hier Polymorphie. Sprich du leitest die Spieler von einer Klasse ab, und da drin hast du die allgemeingültige Schnitstelle, auf die du zugreifen kannst und dann je nach Laufzeit Typ die entsprechenden Funktionen aufrufen.</p>
<p>Das kannst du am besten in einem guten Buch nachlesen, oder mal für den Start hier:<br />
<a href="http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Polymorphie" rel="nofollow">http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Polymorphie</a></p>
<p>btw:<br />
Ich gebe hier aber zu bedenken, dass du für die Spieler besser nicht ein Haufen verschiedene Klassen machst. Denn, überleg mal, was die Gemeinsamkeiten und Unterschiede von den verschiedenen Spielern sind. Na? - Wohl sehr viele Gemeinsamkeiten und nur sehr wenige Unterschiede. Da wäre es doch besser eine allgemeingültige Klasse zu schreiben, welche dann über Parameter z.B die Stärke, Aussehen, verfügbare Attacken usw. gesteuert werden kann.</p>
</blockquote>
<p>Deine Idee ist doch besser <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802902</guid><dc:creator><![CDATA[Barcelona]]></dc:creator><pubDate>Tue, 03 Nov 2009 21:02:35 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;dynamischen&amp;quot; Zeiger an Funktion weitergeben on Tue, 03 Nov 2009 21:11:22 GMT]]></title><description><![CDATA[<p>Du hast es erfasst. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Polymorphie ist nett, aber die richtige Technik am richtigen Ort ist besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802907</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 03 Nov 2009 21:11:22 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;dynamischen&amp;quot; Zeiger an Funktion weitergeben on Tue, 03 Nov 2009 21:26:49 GMT]]></title><description><![CDATA[<p>Hab' jetzt eine allgemeine Klasse &quot;Spieler&quot; und leite davon die einzelnen Kämpferklassen ab.</p>
<p>Hab jetzt eine Kämpfer-Klasse erstellt, bekomm' jedoch immer einen Fehler im Konstruktor dieser Klasse.</p>
<p>Fehler: C:\C++\Artes_Marciales\benjamin.cpp||In constructor <code>Benjamin::Benjamin(int, int)':| C:\\C++\\Artes_Marciales\\benjamin.cpp|10|error: no matching function for call to</code>Spieler::Spieler()'|<br />
C:\C++\Artes_Marciales\spieler.hpp|11|note: candidates are: Spieler::Spieler(const Spieler&amp;)|<br />
C:\C++\Artes_Marciales\spieler.hpp|25|note: Spieler::Spieler(int, int)|<br />
||=== Build finished: 1 errors, 0 warnings ===|</p>
<p>Jemand eine Idee warum?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;spieler.hpp&quot;

using namespace std;

class Benjamin : public Spieler
{

public:
//Memberfunktionen
    Benjamin(int x, int y); //Konstruktor, initialisiert die Werte... 

};
</code></pre>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;benjamin.hpp&quot;
#include &quot;SDL/SDL.h&quot;

using namespace std;

Benjamin::Benjamin(int x, int y) //Konstruktor, initialisiert die Werte
{
    x_koordinate_spieler = x;
    y_koordinate_spieler = y;
    x_animationsphase = 0;
}
</code></pre>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class Spieler
{

  protected:
  //Membervariablen
  int x_koordinate_spieler; // können hier nicht initalisiert werden?
  int y_koordinate_spieler; // brauchen zum Auslesen und Verändern eigene Memberfunktionen!
  int x_animationsphase;

  public:

  //Memberfunktionen
      Spieler(int x, int y); //Konstruktor, initialisiert die Werte... 
  int lesen_x();
  int lesen_y();
  int get_animationsphase();
  int schreiben_animationsphase(int neue_animationsphase);
  int schreiben_x(int neue_x_koordinate);
  int schreiben_y(int neue_y_koordinate);
  void laufen_rechts();
  void laufen_links();
  void springen_oben();
  void ducken();

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1802919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802919</guid><dc:creator><![CDATA[Barcelona]]></dc:creator><pubDate>Tue, 03 Nov 2009 21:26:49 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;dynamischen&amp;quot; Zeiger an Funktion weitergeben on Tue, 03 Nov 2009 21:33:53 GMT]]></title><description><![CDATA[<p>Es steht schon fast in der Fehlermeldung, was du machen sollst.</p>
<pre><code class="language-cpp">Benjamin::Benjamin(int x, int y) //Konstruktor, initialisiert die Werte
: Spieler (x,y)
{
    x_koordinate_spieler = x;
    y_koordinate_spieler = y;
    x_animationsphase = 0;
}
</code></pre>
<p>Du musst die Basisklasse ja auch erzeugen, und wenn du da keinen Standardkonstruktor hast, dann musst du den Konstruktor da von Hand aufrufen. (In der Initialisierungsliste).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802921</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 03 Nov 2009 21:33:53 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;dynamischen&amp;quot; Zeiger an Funktion weitergeben on Tue, 03 Nov 2009 21:43:29 GMT]]></title><description><![CDATA[<p>Vielen Dank, klappt jetzt! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Wie würde denn ein Standardkonstruktor aussehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802932</guid><dc:creator><![CDATA[Barcelona]]></dc:creator><pubDate>Tue, 03 Nov 2009 21:43:29 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;dynamischen&amp;quot; Zeiger an Funktion weitergeben on Tue, 03 Nov 2009 21:52:48 GMT]]></title><description><![CDATA[<p>gans einfach:<br />
x_koordinate_spieler, y_koordinate_spieler // zu lang und hässlich brrrrrrr schauder</p>
<p>x_koordinate_spieler -&gt; x<br />
y_koordinate_spieler -&gt; y</p>
<pre><code class="language-cpp">Spieler(){x=0,y=0;}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1802938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802938</guid><dc:creator><![CDATA[ß0asdf09]]></dc:creator><pubDate>Tue, 03 Nov 2009 21:52:48 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;dynamischen&amp;quot; Zeiger an Funktion weitergeben on Tue, 03 Nov 2009 22:27:47 GMT]]></title><description><![CDATA[<p>ß0asdf09 schrieb:</p>
<blockquote>
<p>gans einfach:</p>
</blockquote>
<p>gans? ente?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802952</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 03 Nov 2009 22:27:47 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;dynamischen&amp;quot; Zeiger an Funktion weitergeben on Tue, 03 Nov 2009 22:29:57 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>ß0asdf09 schrieb:</p>
<blockquote>
<p>gans einfach:</p>
</blockquote>
<p>gans? ente?</p>
</blockquote>
<p>Ente gut alles gut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802953</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 03 Nov 2009 22:29:57 GMT</pubDate></item></channel></rss>