<?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[ofstream, komische Zusatzausgabe]]></title><description><![CDATA[<p>Servus Leute,</p>
<p>ich habe mir eben kurz eine Funktion gebastelt, die ne linked list in eine file ausgibt. Allerdings kommt am Ende der Ausgabe immernoch eine Adresse hinzu, weiß nicht woher diese Zusatzausgabe kommt.</p>
<pre><code class="language-cpp">std::ofstream&amp; ebook::printQueque ( std::ofstream&amp; file ) {
	if ( head == nullptr )
		return file;
	userCell* current = head;
	while ( current != nullptr ) {
		file &lt;&lt; current-&gt;userId &lt;&lt; &quot;, &quot;;
		current = current-&gt;next;
	}
	file &lt;&lt; &quot;\ntesttest&quot;;
	return file;
}
</code></pre>
<p>aufgerufen tue ich sie so :</p>
<pre><code class="language-cpp">logFile &lt;&lt; printQueue();
logFile.close();
</code></pre>
<p>Die Datei schaut dann so aus :</p>
<blockquote>
<p>1,2,3,4,5,<br />
testtest_komischeAdresse_</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/topic/295550/ofstream-komische-zusatzausgabe</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 09:38:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/295550.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Nov 2011 12:27:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ofstream, komische Zusatzausgabe on Wed, 16 Nov 2011 12:27:03 GMT]]></title><description><![CDATA[<p>Servus Leute,</p>
<p>ich habe mir eben kurz eine Funktion gebastelt, die ne linked list in eine file ausgibt. Allerdings kommt am Ende der Ausgabe immernoch eine Adresse hinzu, weiß nicht woher diese Zusatzausgabe kommt.</p>
<pre><code class="language-cpp">std::ofstream&amp; ebook::printQueque ( std::ofstream&amp; file ) {
	if ( head == nullptr )
		return file;
	userCell* current = head;
	while ( current != nullptr ) {
		file &lt;&lt; current-&gt;userId &lt;&lt; &quot;, &quot;;
		current = current-&gt;next;
	}
	file &lt;&lt; &quot;\ntesttest&quot;;
	return file;
}
</code></pre>
<p>aufgerufen tue ich sie so :</p>
<pre><code class="language-cpp">logFile &lt;&lt; printQueue();
logFile.close();
</code></pre>
<p>Die Datei schaut dann so aus :</p>
<blockquote>
<p>1,2,3,4,5,<br />
testtest_komischeAdresse_</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2145176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2145176</guid><dc:creator><![CDATA[Ofstream]]></dc:creator><pubDate>Wed, 16 Nov 2011 12:27:03 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream, komische Zusatzausgabe on Wed, 16 Nov 2011 12:40:17 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2145182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2145182</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 16 Nov 2011 12:40:17 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream, komische Zusatzausgabe on Wed, 16 Nov 2011 12:41:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">logFile &lt;&lt; printQueue();
</code></pre>
<p>Du hast da einen funktionsaufruf + operator&lt;&lt;.<br />
Zuerst wird der funktionsaufruf (printQueue()) ausgeführt und danch wird noch der std::ofstream, der vom funktionsaufruf zurückkommt in den logfile geschrieben.<br />
Ich weiß nicht ob es einen operator&lt;&lt; giobt, der einen stream ausgibt, aber bei dir scheints ja zu kompilieren.<br />
Eigentlich müsst das doch so aussehen:</p>
<pre><code class="language-cpp">printQueue(logFile);
logFile.close();
</code></pre>
<p>(das close kannste auch durch den destruktor bekommen, der ausgeführt wird, sobald die scope des file-objekts verlassen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2145183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2145183</guid><dc:creator><![CDATA[*Q* 1]]></dc:creator><pubDate>Wed, 16 Nov 2011 12:41:10 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream, komische Zusatzausgabe on Wed, 16 Nov 2011 12:54:31 GMT]]></title><description><![CDATA[<p>Oh Gott, wie dumm ;P Stimmt natürlich <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="😉"
    /> Vielen Dank !</p>
<p>Das mit dem close() open() stimmt auch, logFile ist tatsächlich eine globale Variable, die ich per extern in den verschiedenen Übersetzungseinheiten verwenden.<br />
Kann sie wohl also in main() einmal öffnen und dann am Ende auch wieder schliessen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2145190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2145190</guid><dc:creator><![CDATA[Ofstream]]></dc:creator><pubDate>Wed, 16 Nov 2011 12:54:31 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream, komische Zusatzausgabe on Wed, 16 Nov 2011 13:47:30 GMT]]></title><description><![CDATA[<p>Muss hier nochmal eine Frage stellen, bzgl. der Operatoren-Überladung.</p>
<p>Folgendes :</p>
<p>Ich will für die verschiedenen Klassen, die alle Unterklassen von Klasse book sind, den operator&lt;&lt; überladen.<br />
Das geht nicht in den Klassen selber, da die Reihenfolge der Argumente sonst vertauscht ist.<br />
Also habe ich in der main.cpp folgendes :</p>
<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt; ( std::ostream&amp; lhs, book&amp; rhs ) {
	rhs.print ( lhs );
	return lhs;
}
</code></pre>
<p>und in den Klassen :</p>
<pre><code class="language-cpp">virtual void print ( std::ostream&amp; stream) {
		stream &lt;&lt; &quot;Ebook, BookID = &quot; &lt;&lt; bookId &lt;&lt; &quot;, number of downloads left = &quot; 
			   &lt;&lt; maxDownload - downloadsSoFar &lt;&lt; &quot;, downloaded by users &quot;;
	}
</code></pre>
<p>Benutze ich jetzt aber in einer Klassenmethode, zB von ebook, einer abgeleiteten Klasse von book, folgendes :</p>
<pre><code class="language-cpp">logFile &lt;&lt; *this;
</code></pre>
<p>compiled es nicht, weil kein entsprechender operator&lt;&lt; gefunden werden kann.<br />
Das sind doch scope-probleme, oder mach ich was grundlegend falsch ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2145205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2145205</guid><dc:creator><![CDATA[Ofstream]]></dc:creator><pubDate>Wed, 16 Nov 2011 13:47:30 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream, komische Zusatzausgabe on Wed, 16 Nov 2011 14:51:38 GMT]]></title><description><![CDATA[<p>Ofstream schrieb:</p>
<blockquote>
<p>Also habe ich in der main.cpp folgendes :<br />
...</p>
</blockquote>
<p>Hast du den funktionskopf in eine headerdatei gepackt und da wo du die funktion anwenden willst includet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2145235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2145235</guid><dc:creator><![CDATA[*Q* 1]]></dc:creator><pubDate>Wed, 16 Nov 2011 14:51:38 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream, komische Zusatzausgabe on Wed, 16 Nov 2011 15:28:07 GMT]]></title><description><![CDATA[<p>Q schrieb:</p>
<blockquote>
<p>Ofstream schrieb:</p>
<blockquote>
<p>Also habe ich in der main.cpp folgendes :<br />
...</p>
</blockquote>
<p>Hast du den funktionskopf in eine headerdatei gepackt und da wo du die funktion anwenden willst includet?</p>
</blockquote>
<p>Ah ja, natürlich. Der Funktionskopf um dem compiler zu sagen, er soll überall nach der definition suchen.<br />
IntelliSense unterstreicht es zwar noch rot, compilen und funktionieren tut es trotzdem.<br />
Vielen Dank <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/2145243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2145243</guid><dc:creator><![CDATA[Ofstream]]></dc:creator><pubDate>Wed, 16 Nov 2011 15:28:07 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream, komische Zusatzausgabe on Wed, 16 Nov 2011 21:34:47 GMT]]></title><description><![CDATA[<p>Ofstream schrieb:</p>
<blockquote>
<pre><code class="language-cpp">logFile &lt;&lt; printQueue();
logFile.close();
</code></pre>
<p>Die Datei schaut dann so aus :</p>
<blockquote>
<p>1,2,3,4,5,<br />
testtest_komischeAdresse_</p>
</blockquote>
</blockquote>
<p>Der Aufruf von printQueue() macht die Ausgabe bis <code>..testtest</code> . Du hast wahrscheinlich in der Definition der Methode den optionalen Parameter <code>logfile</code> angegeben, sonst würde der Aufruf ohne Parameter gar nicht übersetzen.<br />
Anschließend wird eine <code>ostream&amp;</code> zurückgegeben. Es gibt zwar keinen Ausgabeoperator für <code>ostream</code> aber eine implizite <a href="http://www.cplusplus.com/reference/iostream/ios/operator_voidpt/" rel="nofollow">Konvertierung nach void*</a> - geerbt von <code>basic_ios&lt;char&gt;</code> alias <code>ios</code> . Und ein Ausgabeoperator für void* existiert.<br />
Daher die Adresse des ostream-Objekts.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2145438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2145438</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 16 Nov 2011 21:34:47 GMT</pubDate></item></channel></rss>