<?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[Anfängerfrage: ifstream eine C-Funktion??]]></title><description><![CDATA[<p>Hi,<br />
ich hab mir vor kurzem ein Buch gekauft um mir C++ einzuverleiben.<br />
Das Buch heist: &quot;Der C++ Programmierer&quot; (4. Auflage von 2015 - berücksichtigt bereits C++14).</p>
<p>Ich bin momentan beim Kapitel mit Datei I/O.<br />
Dort wird das einlesen einer Datei so vorgenommen (Copy &amp; Paste):</p>
<pre><code>#include&lt;string&gt;
#include&lt;fstream&gt;
#include&lt;iostream&gt;

using namespace std;

int main( ) {
    string quelldateiname;
    cout &lt;&lt; &quot;Quelldatei? &quot;;
    cin &gt;&gt; quelldateiname; // darf wegen cin keine Leerzeichen enthalten!
    ifstream quelle( quelldateiname); // Objekt für Eingabestrom
    if (!quelle) { // Fehlerabfrage
        cerr &lt;&lt; quelldateiname &lt;&lt; &quot; kann nicht geöffnet werden!\n&quot;;
    }
    else {
        while (quelle) { // Abbruch bei Fehler oder Ende der Datei
            string zeile;
            getline(quelle, zeile); // Lesen einer Zeile
            cout &lt;&lt; zeile &lt;&lt; ’\n’; // Anzeige
        }
    }
} // Datei wird am Programmende automatisch geschlossen.
</code></pre>
<p>Wenn ich das so abtippe, bringt mir der Compiler einen Fehler:</p>
<blockquote>
<p>main.cpp|11|error: no matching function for call to 'std::basic_ifstream&lt;char&gt;::basic_ifstream(std::string&amp;)'|</p>
</blockquote>
<p>Ich hab nun herausgefunden dass ich mit der Methode c_str() arbeiten muss:</p>
<pre><code>ifstream quelle(quelldateiname.c_str()); // Objekt für Eingabestrom
</code></pre>
<p>Auf <a href="http://www.highscore.de/cpp/aufbau/cppstandard.html#cppstandard_string" rel="nofollow">http://www.highscore.de/cpp/aufbau/cppstandard.html#cppstandard_string</a> hab ich dazu gelesen:</p>
<blockquote>
<p>Die Methode c_str() gibt einen Zeiger auf einen Puffer zurück, in dem der String mit einem Nullzeichen abgeschlossen ist. Da Strings in C üblicherweise mit einem Nullzeichen abgeschlossen werden, wird diese Methode immer dann verwendet, wenn ein String an eine C-Funktion übergeben werden muss.</p>
</blockquote>
<p>Ich arbeite auf Windows mit Code::Blocks 13.12. Die Installation fand aber bereits lange vor C++14 statt. Hab ich jetzt einen veralteten Compiler bzw alte Libraries oder ist das ein Fehler im Buch? (In dem Fall würde ich mir das dann gerne markieren, damit ichs beim nächsten durchlesen gleich richtig verstehe^^)</p>
<p>danke schon mal f. die Antworten <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/topic/333947/anfängerfrage-ifstream-eine-c-funktion</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 08:58:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/333947.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Aug 2015 17:18:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anfängerfrage: ifstream eine C-Funktion?? on Wed, 12 Aug 2015 17:18:31 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich hab mir vor kurzem ein Buch gekauft um mir C++ einzuverleiben.<br />
Das Buch heist: &quot;Der C++ Programmierer&quot; (4. Auflage von 2015 - berücksichtigt bereits C++14).</p>
<p>Ich bin momentan beim Kapitel mit Datei I/O.<br />
Dort wird das einlesen einer Datei so vorgenommen (Copy &amp; Paste):</p>
<pre><code>#include&lt;string&gt;
#include&lt;fstream&gt;
#include&lt;iostream&gt;

using namespace std;

int main( ) {
    string quelldateiname;
    cout &lt;&lt; &quot;Quelldatei? &quot;;
    cin &gt;&gt; quelldateiname; // darf wegen cin keine Leerzeichen enthalten!
    ifstream quelle( quelldateiname); // Objekt für Eingabestrom
    if (!quelle) { // Fehlerabfrage
        cerr &lt;&lt; quelldateiname &lt;&lt; &quot; kann nicht geöffnet werden!\n&quot;;
    }
    else {
        while (quelle) { // Abbruch bei Fehler oder Ende der Datei
            string zeile;
            getline(quelle, zeile); // Lesen einer Zeile
            cout &lt;&lt; zeile &lt;&lt; ’\n’; // Anzeige
        }
    }
} // Datei wird am Programmende automatisch geschlossen.
</code></pre>
<p>Wenn ich das so abtippe, bringt mir der Compiler einen Fehler:</p>
<blockquote>
<p>main.cpp|11|error: no matching function for call to 'std::basic_ifstream&lt;char&gt;::basic_ifstream(std::string&amp;)'|</p>
</blockquote>
<p>Ich hab nun herausgefunden dass ich mit der Methode c_str() arbeiten muss:</p>
<pre><code>ifstream quelle(quelldateiname.c_str()); // Objekt für Eingabestrom
</code></pre>
<p>Auf <a href="http://www.highscore.de/cpp/aufbau/cppstandard.html#cppstandard_string" rel="nofollow">http://www.highscore.de/cpp/aufbau/cppstandard.html#cppstandard_string</a> hab ich dazu gelesen:</p>
<blockquote>
<p>Die Methode c_str() gibt einen Zeiger auf einen Puffer zurück, in dem der String mit einem Nullzeichen abgeschlossen ist. Da Strings in C üblicherweise mit einem Nullzeichen abgeschlossen werden, wird diese Methode immer dann verwendet, wenn ein String an eine C-Funktion übergeben werden muss.</p>
</blockquote>
<p>Ich arbeite auf Windows mit Code::Blocks 13.12. Die Installation fand aber bereits lange vor C++14 statt. Hab ich jetzt einen veralteten Compiler bzw alte Libraries oder ist das ein Fehler im Buch? (In dem Fall würde ich mir das dann gerne markieren, damit ichs beim nächsten durchlesen gleich richtig verstehe^^)</p>
<p>danke schon mal f. die Antworten <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/2463600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2463600</guid><dc:creator><![CDATA[salusina]]></dc:creator><pubDate>Wed, 12 Aug 2015 17:18:31 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: ifstream eine C-Funktion?? on Wed, 12 Aug 2015 17:22:11 GMT]]></title><description><![CDATA[<p>Hi, du musst die C++11 Features erst aktivieren mit Flags. Musst mal bei den Compiler Optionen schauen. Ich weiß sie nicht auswendig, aber versuch mal -std=c++11.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2463601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2463601</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Wed, 12 Aug 2015 17:22:11 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: ifstream eine C-Funktion?? on Wed, 12 Aug 2015 17:31:33 GMT]]></title><description><![CDATA[<p>Inzwischen geht auch ein std::string mit neuem Compiler.<br />
Aber daß man immer wieder mal &quot;C-Funktionen&quot; benutzen muss, ist voll ok. Das heißt nur, daß die Funktion in C UND C++ existiert und nicht bloß in C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2463603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2463603</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 12 Aug 2015 17:31:33 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: ifstream eine C-Funktion?? on Wed, 12 Aug 2015 17:25:34 GMT]]></title><description><![CDATA[<p>Alte Library oder C++11 Features nicht aktiviert. Den <code>ifstream</code> Konstruktor mit <code>std::string</code> als Parameter gibts erst seit dann (<a href="http://en.cppreference.com/w/cpp/io/basic_ifstream/basic_ifstream" rel="nofollow">http://en.cppreference.com/w/cpp/io/basic_ifstream/basic_ifstream</a>).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2463604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2463604</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Wed, 12 Aug 2015 17:25:34 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: ifstream eine C-Funktion?? on Wed, 12 Aug 2015 17:31:52 GMT]]></title><description><![CDATA[<p>Ah, vielen Danke, das hat geholfen <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>Für Leute mit ähnlichen Problem:<br />
in Code::Blocks oben auf :<br />
Settings &gt; Compiler...<br />
dort dann das Häckchen setzen:<br />
<a href="http://www.fotos-hochladen.net/view/unbenanntdkao90wyxm.png" rel="nofollow">http://www.fotos-hochladen.net/view/unbenanntdkao90wyxm.png</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2463605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2463605</guid><dc:creator><![CDATA[salusina]]></dc:creator><pubDate>Wed, 12 Aug 2015 17:31:52 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: ifstream eine C-Funktion?? on Wed, 12 Aug 2015 21:22:58 GMT]]></title><description><![CDATA[<p>Da sind noch mehr interessante Checkboxes, z.B. -O2 oder -O3, AVX, -fomit-frame-pointer. Besser ist MS VS 2015 Community. Da geht viel mehr und richtiges x64.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2463622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2463622</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Wed, 12 Aug 2015 21:22:58 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: ifstream eine C-Funktion?? on Wed, 12 Aug 2015 20:55:32 GMT]]></title><description><![CDATA[<p>Erhard Henkes schrieb:</p>
<blockquote>
<p>richtiges x86.</p>
</blockquote>
<p>Und was soll das sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2463625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2463625</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 12 Aug 2015 20:55:32 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: ifstream eine C-Funktion?? on Wed, 12 Aug 2015 21:22:43 GMT]]></title><description><![CDATA[<p>sorry, x64 natürlich. <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/2463626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2463626</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Wed, 12 Aug 2015 21:22:43 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: ifstream eine C-Funktion?? on Wed, 12 Aug 2015 22:05:23 GMT]]></title><description><![CDATA[<p>Gibt es etwa auch falsches x64?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2463629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2463629</guid><dc:creator><![CDATA[nimi]]></dc:creator><pubDate>Wed, 12 Aug 2015 22:05:23 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: ifstream eine C-Funktion?? on Wed, 12 Aug 2015 22:07:35 GMT]]></title><description><![CDATA[<p>Erhard Henkes schrieb:</p>
<blockquote>
<p>Da sind noch mehr interessante Checkboxes, ... AVX, ...</p>
</blockquote>
<p>Immer vorsichtig sein, was man Frischlingen für Ideen gibt. Wenn man Pech hat gibt es dann als nächstes &quot;Mein Programm 'funktioniert nicht mehr'&quot;, was sich dann nach endloser Diskussion und Hilfe beim debuggen als sowas wie &quot;Illegal Instruction&quot; herusstellt.<br />
Und ja, Prozessoren die sowas nicht können sind heute durchaus noch nicht selten (alles vor 2011, z.B. Core i7-880, etc.).</p>
<p>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2463630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2463630</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Wed, 12 Aug 2015 22:07:35 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: ifstream eine C-Funktion?? on Wed, 12 Aug 2015 23:36:26 GMT]]></title><description><![CDATA[<p>Erhard Henkes schrieb:</p>
<blockquote>
<p>Da sind noch mehr interessante Checkboxes, z.B. -O2 oder -O3, AVX, -fomit-frame-pointer. Besser ist MS VS 2015 Community. Da geht viel mehr und richtiges x64.</p>
</blockquote>
<p>Das macht mich jetzt aber traurig.</p>
<p>Nicht das Code::Blocks-Bundle mit Compiler nehmen, sondern einen Nighty von CB und MSYS2 als Compiler. Wäre mir neu, daß der kein richtiges x64 macht. Meinste damit, daß er asm-Sachen ablehnt? Kann ich auf Arbeit mal testen.</p>
<p>Naja, -O3 -march=native -DNDEBUG -std=c++1y und ich möchte sehen, ob MS da rankömmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2463633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2463633</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 12 Aug 2015 23:36:26 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: ifstream eine C-Funktion?? on Thu, 13 Aug 2015 07:06:35 GMT]]></title><description><![CDATA[<p>salusina schrieb:</p>
<blockquote>
<pre><code>while (quelle) { // Abbruch bei Fehler oder Ende der Datei
            string zeile;
            getline(quelle, zeile); // Lesen einer Zeile
            cout &lt;&lt; zeile &lt;&lt; ’\n’; // Anzeige
        }
</code></pre>
</blockquote>
<p>Ich hoffe, dass &quot;Uli&quot; zu diesem Beispiel anmerkt, dass es nicht ganz korrekt ist.</p>
<p>Das Mantra lautet: lesen, überprüfen, verarbeiten.<br />
Der Code macht aber: überprüfen, lesen, verarbeiten.<br />
Evtl. hast Du Dich ja auch schon gewundert, warum da immer eine Zeile mehr ausgegeben wird als in der Quelldatei stehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2463651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2463651</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Thu, 13 Aug 2015 07:06:35 GMT</pubDate></item></channel></rss>