<?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[Fehler bei Ausgabe mittels iterator von vector&amp;lt;*eigeneKlasse&amp;gt;]]></title><description><![CDATA[<p>Hiho,</p>
<p>folgendes Problem:<br />
ich habe meinen vector&lt;Karte*&gt; hauptKartendeck dessen 32 Zeiger auf verschiedene Instanzen der Klasse Karte ein Kartendeck repräsentieren.<br />
Um mir die Ausgabe der verschiedenen Karten zu erleichtern, hab ich für die Klasse Karte den operator&lt;&lt; überladen.<br />
Das sieht dann alles so aus:<br />
karte.cpp</p>
<pre><code>...
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; lhs, Karte const&amp; ka){
        lhs &lt;&lt; ka.getFarbe() &lt;&lt; &quot; &quot; &lt;&lt; ka.getZahl();
}
...
</code></pre>
<p>Funktion um Kartendeck auszugeben:<br />
spielleiter.cpp</p>
<pre><code>void Spielleiter::printHauptKartendeck(){
    vector&lt;Karte*&gt;::const_iterator ci=hauptKartendeck.begin();
    cout &lt;&lt; &quot;HauptKartendeck: &quot; &lt;&lt; endl;
    for(ci;ci!=hauptKartendeck.end();ci++){
        //cout &lt;&lt; (*ci)-&gt;getFarbe() &lt;&lt; ' ' &lt;&lt; (*ci)-&gt;getZahl() &lt;&lt; endl;
        cout &lt;&lt; **ci &lt;&lt; endl;     
    }
}
</code></pre>
<p>Mit der auskommentierten Zeile hab ich vorher alle Karten ausgegeben, aber jetzt würd ich gerne den operator&lt;&lt; benutzen.</p>
<p>Immer wenn ich die Funktion &quot;printHauptKartendeck()&quot; aufrufe wird die erste Karte des Kartendecks noch passend ausgegeben, danach hängt sich das Programm auf. Ich schätze mal es hat irgendwas mit dem Iterator zu tun, dass der irgendwo hinzeigt, verstehe aber nicht ganz warum.</p>
<p>edit:<br />
hab den Fehler grade gefunden. Es liegt an dem &quot;endl&quot; am Ende meiner Ausgabe. Wie muss meine operator&lt;&lt; Funktion denn ausschauen damit ich &quot;endl&quot; verwenden kann??</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/312197/fehler-bei-ausgabe-mittels-iterator-von-vector-lt-eigeneklasse-gt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 03 Aug 2026 02:03:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312197.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Dec 2012 11:04:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehler bei Ausgabe mittels iterator von vector&amp;lt;*eigeneKlasse&amp;gt; on Fri, 28 Dec 2012 11:08:03 GMT]]></title><description><![CDATA[<p>Hiho,</p>
<p>folgendes Problem:<br />
ich habe meinen vector&lt;Karte*&gt; hauptKartendeck dessen 32 Zeiger auf verschiedene Instanzen der Klasse Karte ein Kartendeck repräsentieren.<br />
Um mir die Ausgabe der verschiedenen Karten zu erleichtern, hab ich für die Klasse Karte den operator&lt;&lt; überladen.<br />
Das sieht dann alles so aus:<br />
karte.cpp</p>
<pre><code>...
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; lhs, Karte const&amp; ka){
        lhs &lt;&lt; ka.getFarbe() &lt;&lt; &quot; &quot; &lt;&lt; ka.getZahl();
}
...
</code></pre>
<p>Funktion um Kartendeck auszugeben:<br />
spielleiter.cpp</p>
<pre><code>void Spielleiter::printHauptKartendeck(){
    vector&lt;Karte*&gt;::const_iterator ci=hauptKartendeck.begin();
    cout &lt;&lt; &quot;HauptKartendeck: &quot; &lt;&lt; endl;
    for(ci;ci!=hauptKartendeck.end();ci++){
        //cout &lt;&lt; (*ci)-&gt;getFarbe() &lt;&lt; ' ' &lt;&lt; (*ci)-&gt;getZahl() &lt;&lt; endl;
        cout &lt;&lt; **ci &lt;&lt; endl;     
    }
}
</code></pre>
<p>Mit der auskommentierten Zeile hab ich vorher alle Karten ausgegeben, aber jetzt würd ich gerne den operator&lt;&lt; benutzen.</p>
<p>Immer wenn ich die Funktion &quot;printHauptKartendeck()&quot; aufrufe wird die erste Karte des Kartendecks noch passend ausgegeben, danach hängt sich das Programm auf. Ich schätze mal es hat irgendwas mit dem Iterator zu tun, dass der irgendwo hinzeigt, verstehe aber nicht ganz warum.</p>
<p>edit:<br />
hab den Fehler grade gefunden. Es liegt an dem &quot;endl&quot; am Ende meiner Ausgabe. Wie muss meine operator&lt;&lt; Funktion denn ausschauen damit ich &quot;endl&quot; verwenden kann??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2283877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2283877</guid><dc:creator><![CDATA[butterbemme]]></dc:creator><pubDate>Fri, 28 Dec 2012 11:08:03 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei Ausgabe mittels iterator von vector&amp;lt;*eigeneKlasse&amp;gt; on Fri, 28 Dec 2012 11:06:15 GMT]]></title><description><![CDATA[<p>Nein.<br />
Das hier:</p>
<blockquote>
<pre><code>std::ostream&amp; operator&lt;&lt;(std::ostream&amp; lhs, Karte const&amp; ka){ 
        lhs &lt;&lt; ka.getFarbe() &lt;&lt; &quot; &quot; &lt;&lt; ka.getZahl(); 
}
</code></pre>
</blockquote>
<p>Ist falsch, denn du gibst die Stream-Referenz nicht zurück.<br />
So ist es richtig.</p>
<pre><code>std::ostream&amp; operator&lt;&lt;(std::ostream&amp; lhs, Karte const&amp; ka){ 
        return lhs &lt;&lt; ka.getFarbe() &lt;&lt; &quot; &quot; &lt;&lt; ka.getZahl(); 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2283880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2283880</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 28 Dec 2012 11:06:15 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei Ausgabe mittels iterator von vector&amp;lt;*eigeneKlasse&amp;gt; on Fri, 28 Dec 2012 11:11:32 GMT]]></title><description><![CDATA[<p>Was mir zu deinem Code-Stil auffällt:</p>
<ul>
<li>Du brauchst kein dynamisches, sondern ein statisches Array, da du (so implizierst du es zumindest) eine feste Anzahl von Feldelementen hast.<br />
Ich empfehle<a href="http://en.cppreference.com/w/cpp/container/array" rel="nofollow"> <code>std::array&lt;Karte*, 32&gt;</code> </a>.</li>
<li>Du benutzt Zeiger? Ich hoffe, das hat einen sehr guten Grund. Denn ich befürchte schon schlimmes. Wieso kein Stackobjekt? Sprich: <strong>Wieso lässt du den Container nicht die Karten besitzen?</strong></li>
<li><code>for(ci; ... ; ...)</code> Das ci im init-statement ist nur unnötig.</li>
<li>Möchtest du <code>Spielleiter::printHauptKartendeck</code> nicht Stream-Unabhängig machen? So kannst du dann überall hin serialisieren, auch in Dateien usw.</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2283882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2283882</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 28 Dec 2012 11:11:32 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei Ausgabe mittels iterator von vector&amp;lt;*eigeneKlasse&amp;gt; on Fri, 28 Dec 2012 11:11:12 GMT]]></title><description><![CDATA[<p>ja klar, was ein dummer Leichtsinnsfehler. Danke für deine Antwort.<br />
Das ist das erste mal, dass ich operator&lt;&lt; überlade. Da mir nich klar war, worans liegt hab ich alle möglichen Versionen ausprobiert und irgendwann hab ich wohl mal das &quot;return&quot; gelöscht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2283883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2283883</guid><dc:creator><![CDATA[butterbemme]]></dc:creator><pubDate>Fri, 28 Dec 2012 11:11:12 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei Ausgabe mittels iterator von vector&amp;lt;*eigeneKlasse&amp;gt; on Fri, 28 Dec 2012 11:22:56 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Was mir zu deinem Code-Stil auffällt:</p>
<ul>
<li>Du brauchst kein dynamisches, sondern ein statisches Array, da du (so implizierst du es zumindest) eine feste Anzahl von Feldelementen hast.<br />
Ich empfehle<a href="http://en.cppreference.com/w/cpp/container/array" rel="nofollow"> <code>std::array&lt;Karte*, 32&gt;</code> </a>.</li>
</ul>
</blockquote>
<p>Du hast Recht, das Kartendeck besitzt eine feste Anzahl an Karten. Die Klasse Spielleiter besitzt aber noch einen weiteren vector&lt;Karte*&gt;, das variable Kartendeck, welcher bei jeder Spielrunde seine Anzahl verändert (Karten austeilen/ziehn etc). Um das variable Kartendeck am Anfang jeder neuen Runde wieder mit allen Karten zu initialisieren, hab ich mich dazu entschlossen das statische hauptKartendeck auch dynamisch zu gestalten, damit ich beide Kartendecks gleich handhaben kann und sie den gleichen Typ besitzen</p>
<p>Sone schrieb:</p>
<blockquote>
<ul>
<li>Du benutzt Zeiger? Ich hoffe, das hat einen sehr guten Grund. Denn ich befürchte schon schlimmes. Wieso kein Stackobjekt? Sprich: <strong>Wieso lässt du den Container nicht die Karten besitzen?</strong></li>
</ul>
</blockquote>
<p>Hat eigentlichen keinen besonderen Grund, mir war danach <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>Sone schrieb:</p>
<blockquote>
<ul>
<li><code>for(ci; ... ; ...)</code> Das ci im init-statement ist nur unnötig.</li>
</ul>
</blockquote>
<p>jap stimmt, das ist mir auch schon aufgefallen und wird noch ausgebessert</p>
<p>Sone schrieb:</p>
<blockquote>
<ul>
<li>Möchtest du <code>Spielleiter::printHauptKartendeck</code> nicht Stream-Unabhängig machen? So kannst du dann überall hin serialisieren, auch in Dateien usw.</li>
</ul>
</blockquote>
<p>Das verstehe ich nich ganz, wie ist das gemeint?</p>
<p>edit: ich bin für konstruktive kritik offen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2283893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2283893</guid><dc:creator><![CDATA[butterbemme]]></dc:creator><pubDate>Fri, 28 Dec 2012 11:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei Ausgabe mittels iterator von vector&amp;lt;*eigeneKlasse&amp;gt; on Fri, 28 Dec 2012 11:26:27 GMT]]></title><description><![CDATA[<blockquote>
<p>Das verstehe ich nich ganz, wie ist das gemeint?</p>
</blockquote>
<p>Du nimmst als Parameter eine Referenz auf einen <code>ostream</code> , und benutzt dann statt <code>cout</code> diese Referenz.<br />
Damit kannst du das ganze dann ein wenig flexibler gestalten. :xmas2:</p>
<blockquote>
<p>Hat eigentlichen keinen besonderen Grund, mir war danach</p>
</blockquote>
<p>Das, ist <strong>gar nicht gut</strong>. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2283896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2283896</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 28 Dec 2012 11:26:27 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei Ausgabe mittels iterator von vector&amp;lt;*eigeneKlasse&amp;gt; on Fri, 28 Dec 2012 11:34:54 GMT]]></title><description><![CDATA[<p>Ist die Referenz auf einen ostream, denn nicht eine Referenz auf cout?<br />
Der Aufruf von</p>
<pre><code>cout &lt;&lt; 4;
</code></pre>
<p>ist doch gleichzusetzen mit</p>
<pre><code>operator&lt;&lt;(cout,4);
</code></pre>
<p>oder?<br />
Wie sollte dann deiner Meinung nach operator&lt;&lt; aussehen?</p>
<p>Zu den Zeigern:<br />
Was spricht gegen den vector voller Zeiger?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2283900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2283900</guid><dc:creator><![CDATA[butterbemme]]></dc:creator><pubDate>Fri, 28 Dec 2012 11:34:54 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei Ausgabe mittels iterator von vector&amp;lt;*eigeneKlasse&amp;gt; on Fri, 28 Dec 2012 11:58:43 GMT]]></title><description><![CDATA[<blockquote>
<p>Was spricht gegen den vector voller Zeiger?</p>
</blockquote>
<p>Das zu beantworten, da habe ich jetzt echt keinen Bock mehr drauf.<br />
Es kommt gleich jemand, der macht das :xmas1:</p>
<p>butterbemme schrieb:</p>
<blockquote>
<p>Ist die Referenz auf einen ostream, denn nicht eine Referenz auf cout?</p>
</blockquote>
<p>Nein. <code>cout</code> <strong>ist</strong> ein <code>ostream</code> . Eine Referenz auf einen <code>ostream</code> <strong>kann</strong> eine Referenz auf <code>cout</code> sein, <strong>muss</strong> aber nicht.</p>
<p>butterbemme schrieb:</p>
<blockquote>
<p>Der Aufruf von</p>
<pre><code>cout &lt;&lt; 4;
</code></pre>
<p>ist doch gleichzusetzen mit</p>
<pre><code>operator&lt;&lt;(cout,4);
</code></pre>
<p>oder?</p>
</blockquote>
<p>Fast. Für das schreiben von Skalaren ist der Operator <a href="http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/" rel="nofollow">als Member deklariert</a>:</p>
<pre><code>std::cout.operator&lt;&lt;(4);
</code></pre>
<p>butterbemme schrieb:</p>
<blockquote>
<p>Wie sollte dann deiner Meinung nach operator&lt;&lt; aussehen?</p>
</blockquote>
<p>So wie der Standard es festlegt? Das ist IMO schon gut. :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2283902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2283902</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 28 Dec 2012 11:58:43 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei Ausgabe mittels iterator von vector&amp;lt;*eigeneKlasse&amp;gt; on Fri, 28 Dec 2012 12:46:22 GMT]]></title><description><![CDATA[<p>Ich glaube mir ist schon klar, worauf der Kritikpunkt mit den Zeigern hinausläuft. Größere Fehleranfälligkeit, größeres Fehlerpotential, Fehler schwieriger zu finden usw.<br />
Meine Frage bezog sich auch eher auf Designaspekte, was also in der Hinsicht gegen Zeiger spricht?<br />
Da hab ich mich nicht klar ausgedrückt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2283934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2283934</guid><dc:creator><![CDATA[butterbemme]]></dc:creator><pubDate>Fri, 28 Dec 2012 12:46:22 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei Ausgabe mittels iterator von vector&amp;lt;*eigeneKlasse&amp;gt; on Fri, 28 Dec 2012 12:53:35 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich glaube mir ist schon klar, worauf der Kritikpunkt mit den Zeigern hinausläuft. Größere Fehleranfälligkeit, größeres Fehlerpotential, Fehler schwieriger zu finden usw.<br />
Meine Frage bezog sich auch eher auf Designaspekte, was also in der Hinsicht gegen Zeiger spricht?</p>
</blockquote>
<p>Genau das was du aufgezählt hast...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2283937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2283937</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 28 Dec 2012 12:53:35 GMT</pubDate></item></channel></rss>