<?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[Klassenproblem [gelöst]]]></title><description><![CDATA[<p>Hallo, ich schreibe ein kleines Pong Spiel. Da ich leider noch Anfänger in Objektorientierter Programmierung bin, würde ich tippen, das folgende Problem ist wahrscheinlich für einen Profi leicht zu erkennen. Ich finde bzw. begreife es jedoch nicht.</p>
<p>Ich habe folgende Klassen:<br />
Spieler und Ball</p>
<p>Die Spieler.h sieht folgendermaßen aus:</p>
<pre><code class="language-cpp">#ifndef _SPIELER_H_
#define _SPIELER_H_
#include &quot;C:/Programme/CodeBlocks/SDL-1.2.13/include/SDL.h&quot;
#include &quot;Ball.h&quot;

class SDL_Surface;
namespace Game
{
    class Ball;

    class Spieler
    {
        friend void Game::Kollisionsabfrage(Ball &amp;Ball, Spieler &amp;Spieler);
        friend void Game::Kollisionsabfrage(const SDL_Surface *screen,
                                            Spieler &amp;Spieler1,
                                            Spieler &amp;Spieler2, Ball &amp;Ball,
                                            const int&amp; SpielfeldversatzX,
                                            const int&amp; SpielfeldX,
                                            const int&amp; SpielfeldversatzY,
                                            const int&amp; SpielfeldY);

        public:
            Spieler(const int&amp; SpielfeldversatzX, const int&amp; SpielfeldX, const int&amp; SpielfeldversatzY,
                    const int&amp; SpielfeldY, int AILevel, int Spielfeldseite);
            void SpielerSteuerung(bool&amp; laeuft, const int&amp; SpielfeldX,
                                  const int&amp; SpielfeldversatzY, const int&amp; SpielfeldY);
            void BotSteuerung(bool&amp; laeuft, const int&amp; SpielfeldversatzX, const int&amp; SpielfeldX,
                              const int&amp; SpielfeldversatzY, const int&amp; SpielfeldY,
                              const Ball &amp;Ball);
            void PositionBerechnen(const double&amp; Geschwindigkeit, const Uint32&amp; Zeitspanne);
            void Abdecken(SDL_Surface *screen);
            void Darstellen(SDL_Surface *screen);
            int GetPoints();
            int GetAILevel();

        protected:
            double dPosX;
            double dPosY;
            int w;
            int h;
            int Punkte;
            int AILevel; //0 bedeutet es ist ein vom Spieler gesteuerter Spieler
            double dSpeedY;
            int Spielfeldseite; //1 = links, 2 = rechts
    };
}
#endif
</code></pre>
<p>Bei der Botsteuerung werden die Daten des Balles mit den Klassenfunktionen der Ballklasse:</p>
<p>double GetPosX();<br />
double GetPosY();<br />
double GetSpeedX();<br />
double GetSpeedY();</p>
<p>abgefragt, damit die KI halt entsprechend reagieren kann. Hier die gekürzte Spieler.cpp mit den wichtigen Stellen:</p>
<pre><code class="language-cpp">#include &quot;C:/Programme/CodeBlocks/SDL-1.2.13/include/SDL.h&quot;
#include &quot;Spieler.h&quot;
#include &quot;Ball.h&quot;

...

void Game::Spieler::BotSteuerung(bool&amp; laeuft, const int&amp; SpielfeldversatzX, const int&amp; SpielfeldX,
                                 const int&amp; SpielfeldversatzY, const int&amp; SpielfeldY,
                                 const Ball &amp;Ball)
{
    double SpielerYMitte = dPosY + ((SpielfeldX/16.5)/2);
    double BallYMitte = Ball.GetPosY()+((SpielfeldX/82.6)/2);

...

double WegY = (Entfernung/Ball.GetSpeedX()) * Ball.GetSpeedY();
etc.
</code></pre>
<p>Ich verwende mehrmals diese Get-Funktionen und erhalte für jede Verwendung die selbe Quittung vom Compiler:</p>
<pre><code class="language-cpp">C:\...\Spieler.cpp|72|error: passing `const Game::Ball' as `this' argument of `double Game::Ball::GetPosY()' discards qualifiers|
</code></pre>
<p>Google hat jetzt irgendwie nix sinnvolles dazu ausgespuckt und ich werd daraus auch nicht schlau.</p>
<p>Kann mir vielleicht jemand sagen, was dem Compiler nicht passt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/253039/klassenproblem-gelöst</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 02:11:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253039.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 27 Oct 2009 22:20:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassenproblem [gelöst] on Tue, 27 Oct 2009 22:29:55 GMT]]></title><description><![CDATA[<p>Hallo, ich schreibe ein kleines Pong Spiel. Da ich leider noch Anfänger in Objektorientierter Programmierung bin, würde ich tippen, das folgende Problem ist wahrscheinlich für einen Profi leicht zu erkennen. Ich finde bzw. begreife es jedoch nicht.</p>
<p>Ich habe folgende Klassen:<br />
Spieler und Ball</p>
<p>Die Spieler.h sieht folgendermaßen aus:</p>
<pre><code class="language-cpp">#ifndef _SPIELER_H_
#define _SPIELER_H_
#include &quot;C:/Programme/CodeBlocks/SDL-1.2.13/include/SDL.h&quot;
#include &quot;Ball.h&quot;

class SDL_Surface;
namespace Game
{
    class Ball;

    class Spieler
    {
        friend void Game::Kollisionsabfrage(Ball &amp;Ball, Spieler &amp;Spieler);
        friend void Game::Kollisionsabfrage(const SDL_Surface *screen,
                                            Spieler &amp;Spieler1,
                                            Spieler &amp;Spieler2, Ball &amp;Ball,
                                            const int&amp; SpielfeldversatzX,
                                            const int&amp; SpielfeldX,
                                            const int&amp; SpielfeldversatzY,
                                            const int&amp; SpielfeldY);

        public:
            Spieler(const int&amp; SpielfeldversatzX, const int&amp; SpielfeldX, const int&amp; SpielfeldversatzY,
                    const int&amp; SpielfeldY, int AILevel, int Spielfeldseite);
            void SpielerSteuerung(bool&amp; laeuft, const int&amp; SpielfeldX,
                                  const int&amp; SpielfeldversatzY, const int&amp; SpielfeldY);
            void BotSteuerung(bool&amp; laeuft, const int&amp; SpielfeldversatzX, const int&amp; SpielfeldX,
                              const int&amp; SpielfeldversatzY, const int&amp; SpielfeldY,
                              const Ball &amp;Ball);
            void PositionBerechnen(const double&amp; Geschwindigkeit, const Uint32&amp; Zeitspanne);
            void Abdecken(SDL_Surface *screen);
            void Darstellen(SDL_Surface *screen);
            int GetPoints();
            int GetAILevel();

        protected:
            double dPosX;
            double dPosY;
            int w;
            int h;
            int Punkte;
            int AILevel; //0 bedeutet es ist ein vom Spieler gesteuerter Spieler
            double dSpeedY;
            int Spielfeldseite; //1 = links, 2 = rechts
    };
}
#endif
</code></pre>
<p>Bei der Botsteuerung werden die Daten des Balles mit den Klassenfunktionen der Ballklasse:</p>
<p>double GetPosX();<br />
double GetPosY();<br />
double GetSpeedX();<br />
double GetSpeedY();</p>
<p>abgefragt, damit die KI halt entsprechend reagieren kann. Hier die gekürzte Spieler.cpp mit den wichtigen Stellen:</p>
<pre><code class="language-cpp">#include &quot;C:/Programme/CodeBlocks/SDL-1.2.13/include/SDL.h&quot;
#include &quot;Spieler.h&quot;
#include &quot;Ball.h&quot;

...

void Game::Spieler::BotSteuerung(bool&amp; laeuft, const int&amp; SpielfeldversatzX, const int&amp; SpielfeldX,
                                 const int&amp; SpielfeldversatzY, const int&amp; SpielfeldY,
                                 const Ball &amp;Ball)
{
    double SpielerYMitte = dPosY + ((SpielfeldX/16.5)/2);
    double BallYMitte = Ball.GetPosY()+((SpielfeldX/82.6)/2);

...

double WegY = (Entfernung/Ball.GetSpeedX()) * Ball.GetSpeedY();
etc.
</code></pre>
<p>Ich verwende mehrmals diese Get-Funktionen und erhalte für jede Verwendung die selbe Quittung vom Compiler:</p>
<pre><code class="language-cpp">C:\...\Spieler.cpp|72|error: passing `const Game::Ball' as `this' argument of `double Game::Ball::GetPosY()' discards qualifiers|
</code></pre>
<p>Google hat jetzt irgendwie nix sinnvolles dazu ausgespuckt und ich werd daraus auch nicht schlau.</p>
<p>Kann mir vielleicht jemand sagen, was dem Compiler nicht passt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1799406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1799406</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Tue, 27 Oct 2009 22:29:55 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenproblem [gelöst] on Tue, 27 Oct 2009 22:29:37 GMT]]></title><description><![CDATA[<p>Ich hab hier:</p>
<p><a href="http://stackoverflow.com/questions/550428/an-odd-c-error-test-cpp15-error-passing-const-as-this-argument-of" rel="nofollow">http://stackoverflow.com/questions/550428/an-odd-c-error-test-cpp15-error-passing-const-as-this-argument-of</a></p>
<p>gefunden, dass ich keine nicht konstante Funktion auf ein als const übergebenes Objekt anwenden darf. Eigentlich logisch, 'tschuldigung, dass ich deshalb geschrieben habe. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1799410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1799410</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Tue, 27 Oct 2009 22:29:37 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenproblem [gelöst] on Tue, 27 Oct 2009 22:32:21 GMT]]></title><description><![CDATA[<p>Die relevante Datei hast du nicht gepostet (Ball.h), aber...<br />
du hast eine Referenz auf einen konstanten Ball, also darfst du auch nur konstante Memberfunktionen aufrufen. Um eine solche als konstant auszuweisen, musst du der Deklaration nur ein const nachstellen (z.B. double GetPosY() const;).<br />
Geht natürlich nur, wenn die Memberfunktion das Objekt nicht verändert, das sollte aber bei Gettern der Fall sein.</p>
<p>Edit: ach ja, hattest es ja schon herausgefunden <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/1799412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1799412</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Tue, 27 Oct 2009 22:32:21 GMT</pubDate></item></channel></rss>