<?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[Problem mit string-Variable]]></title><description><![CDATA[<p>Hallo,<br />
ich bin noch ein totaler Anfänger bei C++ und hab ein komisches Problem, das für mich gar keinen Sinn ergibt:</p>
<pre><code class="language-cpp">void fileOutput( string fileName ){
     ofstream myfile;
     myfile.open( fileName );
     myfile &lt;&lt; &quot;lalalalalala.&quot;;
     myfile.close();
}
</code></pre>
<p>Hier gibt er mir bei der Zeile &quot;myfile.open( fileName )&quot; den Fehler aus:</p>
<pre><code>no matching function for call to `std::basic_ofstream&lt;char, std::char_traits&lt;char&gt; &gt;::open(std::string&amp;)'
</code></pre>
<p>Das Problem liegt an der string-Variable, denn wenn ich in der Zeile das filename ersetze durch z.b. &quot;blabla.txt&quot;, dann gibts keinen Fehler.<br />
Das ergibt für mich aber keinen Sinn, da &quot;blabla.txt&quot; ja auch nur ein string ist, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/288680/problem-mit-string-variable</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 19:36:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288680.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Jun 2011 21:38:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit string-Variable on Mon, 20 Jun 2011 21:38:20 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich bin noch ein totaler Anfänger bei C++ und hab ein komisches Problem, das für mich gar keinen Sinn ergibt:</p>
<pre><code class="language-cpp">void fileOutput( string fileName ){
     ofstream myfile;
     myfile.open( fileName );
     myfile &lt;&lt; &quot;lalalalalala.&quot;;
     myfile.close();
}
</code></pre>
<p>Hier gibt er mir bei der Zeile &quot;myfile.open( fileName )&quot; den Fehler aus:</p>
<pre><code>no matching function for call to `std::basic_ofstream&lt;char, std::char_traits&lt;char&gt; &gt;::open(std::string&amp;)'
</code></pre>
<p>Das Problem liegt an der string-Variable, denn wenn ich in der Zeile das filename ersetze durch z.b. &quot;blabla.txt&quot;, dann gibts keinen Fehler.<br />
Das ergibt für mich aber keinen Sinn, da &quot;blabla.txt&quot; ja auch nur ein string ist, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081415</guid><dc:creator><![CDATA[ganonlight]]></dc:creator><pubDate>Mon, 20 Jun 2011 21:38:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string-Variable on Mon, 20 Jun 2011 21:41:50 GMT]]></title><description><![CDATA[<p>Aus unbekannten Gründen akzeptieren die filestreams keinen std::string als Dateinamen, sondern nur &quot;gewöhnliche&quot; C-Strings - also mußt du auch das richtige übergeben: <code>myfile.open( fileName.c_Str() );</code></p>
<p>PS: Mit dem neuen Standard wird alles besser <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>
<p>PPS: Für das open()/close() wird bestimmt noch eine ausführlichere Erklärung kommen, warum es überflüssig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081417</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 20 Jun 2011 21:41:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string-Variable on Mon, 20 Jun 2011 21:45:30 GMT]]></title><description><![CDATA[<p>1.) String-Literale haben den Typ const char* (Auch bekannt als C-Strings). Im aktuellen Standard musst du die Funktion .c_str() verwenden, um genau so einen zu bekommen. (Im nächsten Standard wird dein Code so funktionieren).</p>
<p>2.) Objekte wie Strings sollte man immer per const-ref nehmen. Also const std::string&amp; oder std::string const&amp;, was dir lieber ist. Der Grund ist, dass bei dir hier ein string kopiert wird, was unter extremen Umständen langsam sein kann.</p>
<p>3.) Vermeide die Funktionen .open() und .close(). C++ Streams können das Wunderbare Prinzip RAII auch. Du kannst den Dateinamen im Konstruktor übergeben, im Destruktor wird der Stream automatisch geschlossen.</p>
<p>Also zusammenfassend so:</p>
<pre><code class="language-cpp">void fileOutput(const string&amp; fileName ){
     ofstream myfile(fileName.c_str());
     myfile &lt;&lt; &quot;lalalalalala.&quot;;
     // .close() passiert hier automatisch
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2081418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081418</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 20 Jun 2011 21:45:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string-Variable on Mon, 20 Jun 2011 21:47:18 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>PPS: Für das open()/close() wird bestimmt noch eine ausführlichere Erklärung kommen, warum es überflüssig ist.</p>
</blockquote>
<p><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/2081419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081419</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Mon, 20 Jun 2011 21:47:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string-Variable on Mon, 20 Jun 2011 21:55:31 GMT]]></title><description><![CDATA[<p>Danke für die schnellen Antworten!<br />
Also das mit dem const&amp; usw. kann ich noch nicht so richtig &quot;nachvollziehen&quot;, da fehlt mir einfach noch das Wissen ^^'<br />
Aber es klappt auf jeden Fall, danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081424</guid><dc:creator><![CDATA[ganonlight]]></dc:creator><pubDate>Mon, 20 Jun 2011 21:55:31 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string-Variable on Mon, 20 Jun 2011 22:00:37 GMT]]></title><description><![CDATA[<p>ganonlight schrieb:</p>
<blockquote>
<p>Also das mit dem const&amp; usw. kann ich noch nicht so richtig &quot;nachvollziehen&quot;, da fehlt mir einfach noch das Wissen ^^'</p>
</blockquote>
<p>Dann versuchen wir es mal mit der Kurzfassung: Einen String zu kopieren kann verhältnismäßig teuer werden, wegen der Speicherverwaltung und der Umkopiererei des Inhalts. Wenn es nicht notwendig ist, erspart man sich das, indem man nur einen Verweis auf den ursprünglichen String übergibt - und damit die Funktion nicht versehentlich das Original kaputt macht, wird dieser Verweis mit const erweitert. Das Ergebnis ist dann der Parameter <code>const string&amp; fileName</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081426</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 20 Jun 2011 22:00:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string-Variable on Mon, 20 Jun 2011 22:05:36 GMT]]></title><description><![CDATA[<p>ganonlight schrieb:</p>
<blockquote>
<p>Danke für die schnellen Antworten!<br />
Also das mit dem const&amp; usw. kann ich noch nicht so richtig &quot;nachvollziehen&quot;, da fehlt mir einfach noch das Wissen ^^'<br />
Aber es klappt auf jeden Fall, danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /></p>
</blockquote>
<p>Mit dem Referenz-Operator &amp; übergibst du quasi die Adresse unter der die Variable abgelegt ist, sprich das Original wird übergeben. Wie 31415.. (komplizierter Name <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="😃"
    /> ) ja schon angedeutet hat vermeidest du so sinnloses hin und her kopieren <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="😉"
    /> const sagt nur aus, dass die entsprechende variable konstant ist, also nicht abgeändert werden darf.</p>
<p>-edit- war jemand schneller <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2081428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081428</guid><dc:creator><![CDATA[Sorex]]></dc:creator><pubDate>Mon, 20 Jun 2011 22:05:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string-Variable on Mon, 20 Jun 2011 22:08:42 GMT]]></title><description><![CDATA[<p>Achso ok, jetzt versteh ichs^^<br />
Aber ich hab doch noch ein Problem damit: Es gibt zwar so keinen Fehler:</p>
<pre><code class="language-cpp">void fileOutput(const string&amp; fileName ){
     ofstream myfile(fileName.c_str());
     myfile &lt;&lt; &quot;lalalalalala.&quot;;
     // .close() passiert hier automatisch
}
</code></pre>
<p>Aber der Text in der File wird dann gar nicht geändert.<br />
Wenn ichs so mache, also mit dem normalen String funktionierts:</p>
<pre><code class="language-cpp">void fileOutput(string fileName ){
     ofstream myfile(fileName.c_str());
     myfile &lt;&lt; &quot;lalalalalala.&quot;;
     // .close() passiert hier automatisch
}
</code></pre>
<p>??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081432</guid><dc:creator><![CDATA[ganonlight]]></dc:creator><pubDate>Mon, 20 Jun 2011 22:08:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string-Variable on Mon, 20 Jun 2011 22:17:32 GMT]]></title><description><![CDATA[<p>Übergibst du denn in beiden Beispielen den selben (gültigen) Dateinamen? Ansonsten solltest du mal nachsehen, ob der Stream ordentlich geöffnet werden konnte:</p>
<pre><code class="language-cpp">void fileOutput(const string&amp; fileName ){
    ofstream myfile(fileName.c_str());
    if( !myfile)
        cerr &lt;&lt; &quot;Fehler beim Öffnen der Datei &quot; &lt;&lt; fileName &lt;&lt; endl;
    myfile &lt;&lt; &quot;lalalalalala.&quot;;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2081435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081435</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 20 Jun 2011 22:17:32 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string-Variable on Mon, 20 Jun 2011 22:58:26 GMT]]></title><description><![CDATA[<p>Ja, bei beidem hab ich den gleichen string übergeben.<br />
Was sollte denn bei deinem Code jetzt passieren? Also bei mir zumindest passiert nichts</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081439</guid><dc:creator><![CDATA[ganonlight]]></dc:creator><pubDate>Mon, 20 Jun 2011 22:58:26 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string-Variable on Mon, 20 Jun 2011 22:33:15 GMT]]></title><description><![CDATA[<p>Ich hatte eigentlich gehofft, daß die if()-Bedingung zuschlägt und eine Fehlermeldung herausgibt. Ansonsten: Woran erkennst du, ob etwas geschrieben wurde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081440</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 20 Jun 2011 22:33:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string-Variable on Mon, 20 Jun 2011 22:36:09 GMT]]></title><description><![CDATA[<p>Wo hätte ich denn die Fehlermeldung lesen sollen? Ich kenn mich ja kein bisschen aus ^^', vielleicht hab ichs nur nicht gesehn<br />
Naja, ich schau einfach in der Text-datei, ob sich was geändert hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081443</guid><dc:creator><![CDATA[ganonlight]]></dc:creator><pubDate>Mon, 20 Jun 2011 22:36:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string-Variable on Mon, 20 Jun 2011 22:42:15 GMT]]></title><description><![CDATA[<p>ganonlight schrieb:</p>
<blockquote>
<p>Wo hätte ich denn die Fehlermeldung lesen sollen? Ich kenn mich ja kein bisschen aus ^^', vielleicht hab ichs nur nicht gesehn</p>
</blockquote>
<p>cerr-Ausgaben landen normalerweise im Konsolen-Fenster, aber wenn du keins hast, könnte das etwas schwierig werden.</p>
<blockquote>
<p>Naja, ich schau einfach in der Text-datei, ob sich was geändert hat.</p>
</blockquote>
<p>Wie kann sich denn am Datei-Inhalt etwas ändern, wenn du immer den selben Text reinschreibst? Achte mal auf das Änderungsdatum - oder ergänze den Stream-Konstruktor zu <code>ofstream myfile(fileName.c_str(),ios::app);</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081445</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 20 Jun 2011 22:42:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string-Variable on Mon, 20 Jun 2011 23:00:49 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Wie kann sich denn am Datei-Inhalt etwas ändern, wenn du immer den selben Text reinschreibst?</p>
</blockquote>
<p>Im Programm hab ich natürlich schon immer was anderes reinschreiben lassen. Und das Änderungsdatum hat sich nicht geändert, durch myfile(fileName.c_str(),ios::app); ist auch nichts passiert</p>
<p>EDIT:<br />
Aaach, ich hab den Fehler gefunden:<br />
Ich hab vergessen, dass ich auch bei dem Deklarieren der Methode den Konstruktor ändern muss, also zu</p>
<pre><code class="language-cpp">void fileOutput( const string&amp; );
</code></pre>
<p>Sry, wie gesagt, ich bin noch ein Anfänger in C++ ^^'<br />
In Java gabs das mit dem Methoden deklarieren ja auch gar nicht, da hab ich dann nicht dran gedacht ^^'<br />
Jetzt gehts, danke nochmal <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2081451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081451</guid><dc:creator><![CDATA[ganonlight]]></dc:creator><pubDate>Mon, 20 Jun 2011 23:00:49 GMT</pubDate></item></channel></rss>