<?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[Methode vorher bekannt machen]]></title><description><![CDATA[<pre><code class="language-cpp">class Bitmap;
class Point
{
   int x;
   int y;
   bool drawOn( Bitmap &amp;buffer, Color &amp;col );
};
class Bitmap
{
    void doSomething();
};

bool Point::drawOn( Bitmap &amp;buffer, Color &amp;col )
{
    buffer.doSomething();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/264116/methode-vorher-bekannt-machen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 04:59:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264116.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Apr 2010 10:41:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methode vorher bekannt machen on Fri, 02 Apr 2010 10:46:23 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Bitmap;
class Point
{
   int x;
   int y;
   bool drawOn( Bitmap &amp;buffer, Color &amp;col );
};
class Bitmap
{
    void doSomething();
};

bool Point::drawOn( Bitmap &amp;buffer, Color &amp;col )
{
    buffer.doSomething();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1876767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1876767</guid><dc:creator><![CDATA[ChristophLu]]></dc:creator><pubDate>Fri, 02 Apr 2010 10:46:23 GMT</pubDate></item><item><title><![CDATA[Reply to Methode vorher bekannt machen on Fri, 02 Apr 2010 10:53:29 GMT]]></title><description><![CDATA[<p>was ich vielleicht vergessen hab:<br />
Point ist eine Template-Klasse. ( Bitmap aber nicht )<br />
Somit kann ich ja nicht Deklaration und Implementation trennen( also *.hpp und *.cpp-Datei )</p>
<p>Es ist übrigens nicht günstig, meine gesamte Problembeschreibung zu löschen, evilissimo!<br />
Du hättest auch normal antworten können.<br />
Also nochmal:</p>
<p>Jetziger stand:</p>
<pre><code class="language-cpp">struct Color
{
    int r;
    int g;
    int b;
};

class Bitmap;

template&lt; typename PointType &gt;
    class Point
{
    PointType x;
    PointType y;

    bool drawOn( Bitmap &amp;buffer, Color &amp;col )
    {
        buffer.doSomething();
        //...
    }
};

class Bitmap
{
    public:
        void doSomething( );
};
</code></pre>
<p>Nur wir sag ich dem Kompiler, dass Bitmap::doSomething() später noch kommt?</p>
<p>MfG. Christoph Ludwig</p>
<p>P.S: Alle Klassen sind in eigenen Headerdateien.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1876775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1876775</guid><dc:creator><![CDATA[ChristophLu]]></dc:creator><pubDate>Fri, 02 Apr 2010 10:53:29 GMT</pubDate></item><item><title><![CDATA[Reply to Methode vorher bekannt machen on Fri, 02 Apr 2010 10:53:45 GMT]]></title><description><![CDATA[<p>Jup</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1876776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1876776</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Fri, 02 Apr 2010 10:53:45 GMT</pubDate></item><item><title><![CDATA[Reply to Methode vorher bekannt machen on Fri, 02 Apr 2010 11:11:51 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22527">@ChristophLu</a>,<br />
Hast du es schon probiert zu kompilieren, denn dein Code funktioniert so wie er ist. Templates werden erst genauer ausgewertet, wenn sie instanziert werden, also aus einem Klassentemplate eine Templateklasse gewonnen wird.</p>
<p>Hier mal kompilierbaren Code, den du schnell durchjagen kannst, da es ein paar andere Fehler in deinem Code hat und keine <code>main</code> :</p>
<pre><code class="language-cpp">struct Color 
{ 
    int r; 
    int g; 
    int b; 
}; 

class Bitmap; 

template&lt; typename PointType &gt; 
class Point 
{ 
    PointType x; 
    PointType y; 

public:
    bool drawOn( Bitmap &amp;buffer, Color &amp;col ) 
    { 
        buffer.doSomething(); 
        //... 
        return true;
    } 
}; 

class Bitmap 
{ 
public: 
    void doSomething( ) {}; 
};

int main()
{
    Point&lt;int&gt; p;
    Bitmap bitmap;
    Color color;
    p.drawOn(bitmap, color);

    return 0;
}
</code></pre>
<p>Allerdings was ich hier wirklich für fragwürdig halte ist, dass Point dafür verantwortlich sein soll, um sich auf das Bitmap zu zeichnen. Halte ich für völlig verkehrt.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1876782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1876782</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 02 Apr 2010 11:11:51 GMT</pubDate></item><item><title><![CDATA[Reply to Methode vorher bekannt machen on Fri, 02 Apr 2010 11:23:28 GMT]]></title><description><![CDATA[<p>Ja, ich hab es schon kompiliert. Da kommt dieser Fehler:<br />
<code>invalid use of incomplete type 'Bitmap'</code></p>
<p>Der Code oben hatte natürlich noch Fehler, weil ich ihn extrem gekürzt habe. Eigentlich ist es so:</p>
<p>Headerdatei:</p>
<pre><code class="language-cpp">class Bitmap;
#include &quot;Color.hpp&quot;
#include &quot;Point.hpp&quot;
//...
#include &quot;Bitmap.hpp&quot;
</code></pre>
<p>Point.hpp:</p>
<pre><code class="language-cpp">template&lt; typename PointType &gt;
    struct Point
{
    PointType x;
    PointType y;

    bool drawOn( Bitmap &amp;buffer, Color &amp;col )
    {
        buffer.doSomething();
        //...
        return true;
    }
};
</code></pre>
<p>Bitmap.hpp</p>
<pre><code class="language-cpp">class Bitmap
{
    public:
        void doSomething( );
};
</code></pre>
<p>Bitmap.cpp</p>
<pre><code class="language-cpp">#include &quot;Bitmap.hpp&quot;
Bitmap::doSomething( )
{
    //...
}
</code></pre>
<p>Auch wieder start abgespeckt. Nur Bitmap kann ich nicht über Point deklarieren( also #include &quot;Bitmap.hpp&quot; vor #include &quot;Point.hpp&quot; schreiben )</p>
<p>Wieso verkehrt? Meinst du, ich sollte sowas in die Bitmap-Klasse schreiben, á la:</p>
<pre><code class="language-cpp">Bitmap::drawPixel( Point&lt;int&gt; &amp;position, Color &amp;col );
</code></pre>
<p>?</p>
<p>MfG. Christoph Ludwig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1876787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1876787</guid><dc:creator><![CDATA[ChristophLu]]></dc:creator><pubDate>Fri, 02 Apr 2010 11:23:28 GMT</pubDate></item><item><title><![CDATA[Reply to Methode vorher bekannt machen on Fri, 02 Apr 2010 12:05:45 GMT]]></title><description><![CDATA[<p>ChristophLu schrieb:</p>
<blockquote>
<p>Ja, ich hab es schon kompiliert. Da kommt dieser Fehler:<br />
<code>invalid use of incomplete type 'Bitmap'</code></p>
</blockquote>
<p>Wegen der Fehlermeldung kurz mit GCC probiert. Ok, der kann das nicht. Dann wird es sehr wahrscheinlich der Standard auch nicht erlauben. Darüber bin ich etwas überrascht, muss ich eingestehen <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="😉"
    /><br />
Werde ich dann später noch genauer nachprüfen.</p>
<p>ChristophLu schrieb:</p>
<blockquote>
<p>Auch wieder start abgespeckt.</p>
</blockquote>
<p>Ehm, hallo? Der Code ist noch abgespeckter als der vorherige. Wenn du Code präsentierst, dann ist es häufig sinnvoll etwas zu geben, dass kurz und klein ist, den Fehler aber reproduziert, dass heisst kompilierbar ist.</p>
<p>ChristophLu schrieb:</p>
<blockquote>
<p>Nur Bitmap kann ich nicht über Point deklarieren( also #include &quot;Bitmap.hpp&quot; vor #include &quot;Point.hpp&quot; schreiben )</p>
</blockquote>
<p>Wieso eigentlich nicht?</p>
<p>ChristophLu schrieb:</p>
<blockquote>
<p>Wieso verkehrt? Meinst du, ich sollte sowas in die Bitmap-Klasse schreiben, á la:</p>
<pre><code class="language-cpp">Bitmap::drawPixel( Point&lt;int&gt; &amp;position, Color &amp;col );
</code></pre>
<p>?</p>
</blockquote>
<p>Wäre auch verkehrt. Die Aufgabe eines Punktes ist es einen Punkt zu repräsentieren, aber nicht ihn zu zeichnen. Die Aufgabe eines Bitmaps ist ein Bitmap zu repräsentieren und vielleicht Möglichkeiten anzubieten es zu verändern, aber nicht darauf zu zeichnen.</p>
<p>Also muss eine Klasse her, welche für das Zeichnen zuständig ist. So machen es auch die meisten Bibliotheken. Zum Beispiel hat die WinAPI ein Graphic Device mit welchem man auf unterschiedliche Ziele Zeichnen kann, zum Beispiel auch auf einem Bitmap. Daher wäre vielleicht sowas sinnvoll:</p>
<pre><code class="language-cpp">GraphicDevice gd(myBitmap);
gd.drawPoint(myPoint, myColor);
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1876812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1876812</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 02 Apr 2010 12:05:45 GMT</pubDate></item><item><title><![CDATA[Reply to Methode vorher bekannt machen on Fri, 02 Apr 2010 12:09:25 GMT]]></title><description><![CDATA[<p>Oops ich seh grad das ich anstatt zu zitieren auf 'editieren' geklickt hatte. <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="😞"
    /><br />
Und den ganzen post entfernt habe. Sorry ChristophLu. <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>Eigentlich sollte dein editierter post eine Antwort gewesen sein <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=":-/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1876814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1876814</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Fri, 02 Apr 2010 12:09:25 GMT</pubDate></item><item><title><![CDATA[Reply to Methode vorher bekannt machen on Fri, 02 Apr 2010 12:39:21 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Also muss eine Klasse her, welche für das Zeichnen zuständig ist. So machen es auch die meisten Bibliotheken. Zum Beispiel hat die WinAPI ein Graphic Device mit welchem man auf unterschiedliche Ziele Zeichnen kann, zum Beispiel auch auf einem Bitmap. Daher wäre vielleicht sowas sinnvoll:</p>
<pre><code class="language-cpp">GraphicDevice gd(myBitmap);
gd.drawPoint(myPoint, myColor);
</code></pre>
</blockquote>
<p>Naja, klingt sinvoll.<br />
Nur will ich die Anwendung so einfach wie möglich machen. Meiner Meinung nach stört es den Lesefluss wenn man erst einen Device erstellen muss, bevor man dann endlich zeichnen kann.</p>
<p>Also sowas:</p>
<pre><code class="language-cpp">myPoint.drawOn( myBitmap, myColor );
//ODER
myBitmap.drawPoint( myPoint, myColor );
</code></pre>
<p>finde ich besser als sowas in der Art:</p>
<pre><code class="language-cpp">GraphicDevice gd( myBitmap );
gd.drawPoint( myPoint, myColor );
gd.release(); //(optional), aber gibts ja auch manchmal
</code></pre>
<p>so mal nach dem KISS-Prinzip...</p>
<p>MfG. Christoph Ludwig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1876840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1876840</guid><dc:creator><![CDATA[ChristophLu]]></dc:creator><pubDate>Fri, 02 Apr 2010 12:39:21 GMT</pubDate></item><item><title><![CDATA[Reply to Methode vorher bekannt machen on Sat, 03 Apr 2010 13:51:57 GMT]]></title><description><![CDATA[<p>ChristophLu schrieb:</p>
<blockquote>
<p>Nur will ich die Anwendung so einfach wie möglich machen. Meiner Meinung nach stört es den Lesefluss wenn man erst einen Device erstellen muss, bevor man dann endlich zeichnen kann.</p>
</blockquote>
<p>Ehm, aja <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 />
Also mit dem &quot;es stört den Lesefluss&quot; wird langsam bei allem argumentiert. Es ist eine verdammte Programmiersprache und nicht Deutsch. Man sollte hier viel mehr funktional denken.</p>
<p>Zudem hinkt dein Vergleich etwas sehr. Wer schreibt dir vor, dass du das GraphicDevice immer neu erstellen musst? Und du wirst ja wohl kaum, nur um einen Punkt zu zeichnen, ein GraphicDevice erstellen. Meistens zeichnet man gleich viel mehr auf einmal. Man muss dies daher schon in der richtigen Relation sehen. Bevor man zeichnet, sagt man dem Leser ganz klar, dass man jetzt ein Objekt für das Zeichnen erstellt und dann fängt man mit diesem an über mehrere Zeilen irgendetwas zu zeichnen.</p>
<p>Was du hier auch komplett ignorierst und vergisst, ist die klare Auftrennung von Aufgaben. Sowas hilft schlussendlich auch dem Verständnis der Bibliothek und macht sie einfach. Denn so kannst du auch eine m:1:n Beziehung aufbauen, während mit deiner aktuellen Lösung du eine m:n Beziehung hast. Wenn einmal nicht nur auf einem Bitmap gezeichnet werden soll, dann hast du ein Problem und musst zig Schnittstellen neu erstellen.</p>
<p>Und die release Methode ist völlig unnötig oder SEHR optional. In C++ gibt es Destruktoren, welche solche Aufgaben allenfalls übernehmen können. Wobei ich hier allerdings gar nicht einsehe, wieso es eine solche Methode bräuchte. Das GraphicDevice kann Bitmap gleich als Model verwenden.</p>
<p>KISS ist schön und gut, aber man sollte deswegen nicht anfangen schlechtes Design einzuführen. Ich hatte erst gerade letztens jemand, welcher wegen dem KISS Prinzip alle Attribute public gemacht hat. Mit der Begründung eben, dass es doch nur völlig umständlich ist, immer über Getter und Setter zu gehen. Als man seinen Code dann auch angeschaut hat, wurde klar wieso er dies als mühsam empfand, weil er die Aufgaben nicht mehr sauber getrennt hat, musste er von von völlig verkehrten Stellen auf alle Informationen einer Klasse zugreifen. Statt die Aufgaben an die Klasse auzulagern oder ein paar zusätzliche Klassen einzuführen, welche diese Aufgaben übernehmen. Der Code wirklich in Keep It Simple and <strong>Stupid</strong> gehalten.</p>
<p>Probiere lieber ein gutes Design und klare Aufgabentrennung anzustreben. Sowas hilft am allermeisten dem Verständnis eines Programmcodes. Wenn jede Klasse nur eine Aufgabe erfüllt (eine Richtlinie), dann ist das Zusammenspiel der Klassen deutlich einfacher zu verstehen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877135</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 03 Apr 2010 13:51:57 GMT</pubDate></item></channel></rss>