<?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[ifstream zurückgeben]]></title><description><![CDATA[<p>Ich wollte gerade eine Methode schreiben mit deren Hilfe ich ifstream objekte zurückgeben kann, eine Art outsourcing für mein aktuelles Projekt in dem ich sehr oft daten Speicher bzw Lade. Allerdings meint mein Compiler ich würde auf Private Member zugreifen, was ich mir allerdings nicht erklären kann:</p>
<pre><code class="language-cpp">ifstream Read::read_file()
{
	try{
	std::cout &lt;&lt; &quot;Bitte geben sie den kompletten Datei Pfad an: &quot;;
	string file_path;
	cin &gt;&gt; file_path;
	ifstream input_file(file_path.c_str());
	if(!input_file) throw &quot;Datei konnte nicht geoeffnet werden&quot;;
	return input_file;
	}
	catch(char* str)
	{
		cout &lt;&lt; str &lt;&lt; endl;
		//set_flag(false);
		system(&quot;PAUSE&quot;);
		read_file();
	}
}
</code></pre>
<p>danke für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/260704/ifstream-zurückgeben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 22:29:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/260704.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 Feb 2010 16:27:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ifstream zurückgeben on Mon, 08 Feb 2010 16:27:56 GMT]]></title><description><![CDATA[<p>Ich wollte gerade eine Methode schreiben mit deren Hilfe ich ifstream objekte zurückgeben kann, eine Art outsourcing für mein aktuelles Projekt in dem ich sehr oft daten Speicher bzw Lade. Allerdings meint mein Compiler ich würde auf Private Member zugreifen, was ich mir allerdings nicht erklären kann:</p>
<pre><code class="language-cpp">ifstream Read::read_file()
{
	try{
	std::cout &lt;&lt; &quot;Bitte geben sie den kompletten Datei Pfad an: &quot;;
	string file_path;
	cin &gt;&gt; file_path;
	ifstream input_file(file_path.c_str());
	if(!input_file) throw &quot;Datei konnte nicht geoeffnet werden&quot;;
	return input_file;
	}
	catch(char* str)
	{
		cout &lt;&lt; str &lt;&lt; endl;
		//set_flag(false);
		system(&quot;PAUSE&quot;);
		read_file();
	}
}
</code></pre>
<p>danke für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852551</guid><dc:creator><![CDATA[Jud4s]]></dc:creator><pubDate>Mon, 08 Feb 2010 16:27:56 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream zurückgeben on Mon, 08 Feb 2010 16:33:18 GMT]]></title><description><![CDATA[<p>Darf man std::ifstreams überhaupt kopieren?<br />
Gib doch mal eine Referenz zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852553</guid><dc:creator><![CDATA[Icematix]]></dc:creator><pubDate>Mon, 08 Feb 2010 16:33:18 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream zurückgeben on Mon, 08 Feb 2010 16:33:56 GMT]]></title><description><![CDATA[<p>Wenn du dir genau anschaust, was das für provate Member sind sollte es klingeln.<br />
Tip: ifstream ist nicht kopierbar! Dies realisiert man dadurch, dass man Kopierkonstruktor und Zuweiseungsoperator private deklariert.<br />
Versuch das lieber ordentlich zu erledigen, z.B. indem du eine Referenz auf ein ifstream übergibst.</p>
<p>BTW:<br />
Dein Einsatz von Exceptions grenzt ja schon an Vergewaltigung...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852554</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or_off]]></dc:creator><pubDate>Mon, 08 Feb 2010 16:33:56 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream zurückgeben on Mon, 08 Feb 2010 16:36:30 GMT]]></title><description><![CDATA[<p>Danke für den Aufmunternden Kommi bezüglich meiner Exceptions <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>
<p>Hmm, aber wenn ich eine Referenz aus einer Methode zurück gebe? Was garantiert mir das die Speicherzelle nicht gelöscht wird sobald die Methode und damit das eigtl Ifstream Objekt beendet ist? Oder verhält sich die Lebenszeit von lokalen Variablen anderns wenn man Referenzen übergibt? Das kenn ich so eigtl wenn nur von Java.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852557</guid><dc:creator><![CDATA[Jud4s]]></dc:creator><pubDate>Mon, 08 Feb 2010 16:36:30 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream zurückgeben on Mon, 08 Feb 2010 16:40:20 GMT]]></title><description><![CDATA[<p>Jud4s schrieb:</p>
<blockquote>
<p>Danke für den Aufmunternden Kommi bezüglich meiner Exceptions <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>
<p>Hmm, aber wenn ich eine Referenz aus einer Methode zurück gebe? Was garantiert mir das die Speicherzelle nicht gelöscht wird sobald die Methode und damit das eigtl Ifstream Objekt beendet ist? Oder verhält sich die Lebenszeit von lokalen Variablen anderns wenn man Referenzen übergibt? Das kenn ich so eigtl wenn nur von Java.</p>
</blockquote>
<p>Stimmt schon, eben nicht mitgedacht. Ich persönlich würde soetwas basteln:</p>
<pre><code class="language-cpp">std::ifstream&amp; read_file(std::ifstream&amp; in)
{
    //Code
    return in;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1852561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852561</guid><dc:creator><![CDATA[Icematix]]></dc:creator><pubDate>Mon, 08 Feb 2010 16:40:20 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream zurückgeben on Mon, 08 Feb 2010 16:42:43 GMT]]></title><description><![CDATA[<p>Jud4s schrieb:</p>
<blockquote>
<p>Danke für den Aufmunternden Kommi bezüglich meiner Exceptions <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>
</blockquote>
<p>Bitte :p<br />
Dir ist hoffentlich klar, dass eine Exeption hier absolut unnötig ist. Du wirfst sie nur um sie gleich wieder zu fangen. Das geht auch gleich ohne Exception <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>
<blockquote>
<p>Hmm, aber wenn ich eine Referenz aus einer Methode zurück gebe? Was garantiert mir das die Speicherzelle nicht gelöscht wird sobald die Methode und damit das eigtl Ifstream Objekt beendet ist? Oder verhält sich die Lebenszeit von lokalen Variablen anderns wenn man Referenzen übergibt? Das kenn ich so eigtl wenn nur von Java.</p>
</blockquote>
<p>Speicher wird gelöscht, wenn das funktiniert hattest du Glück...<br />
Mach es mit einer Referenz als PARAMETER</p>
<pre><code class="language-cpp">void open_file( std::ifstream&amp; file ) {
    std::cout &lt;&lt; &quot;Bitte geben sie den kompletten Datei Pfad an: &quot;;
    string file_path;
    cin &gt;&gt; file_path;
    file.open(file_path.c_str());
}

int main()
{
    ifstream file;
    open_file(file);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1852563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852563</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Mon, 08 Feb 2010 16:42:43 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream zurückgeben on Mon, 08 Feb 2010 18:02:13 GMT]]></title><description><![CDATA[<p>Icematix schrieb:</p>
<blockquote>
<p>Darf man std::ifstreams überhaupt kopieren?</p>
</blockquote>
<p>Nein.<br />
Referenzen sind der übliche Weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852606</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 08 Feb 2010 18:02:13 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream zurückgeben on Mon, 08 Feb 2010 18:06:52 GMT]]></title><description><![CDATA[<p>Oder wenn du aus irgendeinem Grund unbedingt den Rückgabetypen benutzen willst:</p>
<pre><code class="language-cpp">std::auto_ptr&lt;std::ifstream&gt; read_file();
</code></pre>
<p>(Nicht, dass das wahnsinnig sinnvoll wäre, aber um mal die Möglichkeit genannt zu haben.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1852612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1852612</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 08 Feb 2010 18:06:52 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream zurückgeben on Tue, 09 Feb 2010 12:26:25 GMT]]></title><description><![CDATA[<p>Nexus, dann mußt du aber auch darauf hinweisen, daß man dann den 'ifstream' in der Funktion mit new anlegen muß.<br />
(Persönlich wende ich aber auto_ptr nur innerhalb einer Funktion bzw. intern innerhalb einer Klasse an - nicht als public Rückgabewert - dafür gibt es bessere Wrapper-Klassen).</p>
<p>Und Jud4s:<br />
du solltest die Ein- bzw. Ausgabe (IO) und die Daten trennen.<br />
Gebe daher besser die Datenstruktur zurück und überlasse das Einlesen der Datei einer internen Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1853045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1853045</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 09 Feb 2010 12:26:25 GMT</pubDate></item></channel></rss>