<?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[Unsichtbarer Fehler]]></title><description><![CDATA[<p>Hi,<br />
mein Fehler wird zwar in &lt;iostream&gt; gemeldet, muss aber ein normaler C++-Fehler sein. Eigentlich wollte ich testen, ob miene Dateiausleseklasse funktioniert, aber das scheitert jetzt an der Standardausgabe^^.</p>
<p>Meine Hauptdatei &quot;Test.cpp&quot;:</p>
<pre><code class="language-cpp">#include &quot;ConfigLaden.h&quot;
#include &lt;iostream&gt;
using namespace std;

int main (int nNumberofArgs, char* pszArgs[])
{
    ConfigLoad Test(&quot;Pups.txt&quot;);
    Test.ReadNextLine();
    if (Test.FoundString(&quot;Hallo!&quot;))
    {
        cout &lt;&lt; &quot;Tada!&quot;;
    } else {
        cout &lt;&lt; &quot;Geht net&quot;;
    }
    return 0;
}
</code></pre>
<p>Die &quot;ConfigLaden.h&quot;:</p>
<pre><code class="language-cpp">#ifndef _CONFLADEN_H_
#define _CONFLADEN_H_
#include &lt;string&gt;
#include &lt;fstream&gt;

using namespace std;

class ConfigLoad
{
    private:
        char* Puffer;
        ifstream *pKonfiguration;

    public:
        ConfigLoad(char* file);
        void ReadNextLine();
        bool FoundString(char* search) const;
        size_t StringPos(char* search) const;
        int ReadInt(size_t nPosition) const;//Bis kein Zahlzeichen mehr kommt
        double ReadDouble(size_t nPosition) const;
        char* ReadString(size_t nPosition) const;
}
#endif
</code></pre>
<p>Und die &quot;ConfigLaden.cpp&quot;, gekürzt, damits nicht zu lange wird:</p>
<pre><code class="language-cpp">//using namespace std;

ConfigLoad::ConfigLoad(char* file)
{
    Puffer = new char[1000];

    //Datei öffnen
    pKonfiguration = new ifstream (file);

    //Fehlerkontrolle
    if (!pKonfiguration -&gt; good())
    {
        delete pKonfiguration;
        cout &lt;&lt; &quot; konnte nicht geöffnet werden.&quot;;
    }
}

void ConfigLoad::ReadNextLine()
{
    if (!pKonfiguration -&gt; eof())
    {
        pKonfiguration -&gt; getline(Puffer, 1000);
    }
}

bool ConfigLoad::FoundString(char* search) const
{
    bool found = false;
    size_t position = 1000;

    //Suchen
    position = Puffer.find(search);
    if (position != 1000)
    {
        found = true;
    }

    return found;
}

size_t ConfigLoad::StringPos(char* search) const
{
    size_t found = 0;

    //Suchen
    found = Puffer.find(search);
    found += search.length();

    return found;
}

int ConfigLoad::ReadInt(size_t nPosition) const
{
    int Integer = 0;
    char* ZwischenPuffer = new char[1000];
    char* IntPuffer = new char[1000];
    bool Zahl = false;

    //ZwischenPuffer füllen
    ZwischenPuffer = Puffer.substr (nPosition);

    //Ab dem ersten nicht-Zahlzeichen abschneiden
    for (size_t i = 0; i &lt; ZwischenPuffer.length(); i++)
    {
        Zahl = false;

        switch (ZwischenPuffer[i])
        {
            case &quot;0&quot;:
                Zahl = true;
                break;
            case &quot;1&quot;:
                Zahl = true;
                break;
            case &quot;2&quot;:
                Zahl = true;
                break;
            case &quot;3&quot;:
                Zahl = true;
                break;
            case &quot;4&quot;:
                Zahl = true;
                break;
            case &quot;5&quot;:
                Zahl = true;
                break;
            case &quot;6&quot;:
                Zahl = true;
                break;
            case &quot;7&quot;:
                Zahl = true;
                break;
            case &quot;8&quot;:
                Zahl = true;
                break;
            case &quot;9&quot;:
                Zahl = true;
                break;
            default:
                break;
        }

        //Wenn Zahl zu Ende, zusammenkopieren
        if(!Zahl)
        {
            IntPuffer = ZwischenPuffer.substr (0, (i - 1));
            i = ZwischenPuffer.length(); //Schleife beenden
        }
    }
    //In int umwandeln
    Integer = atoi(IntPuffer);

    return Integer;
}

double ConfigLoad::ReadDouble(size_t nPosition) const
{
    double Double = 0.0;
    char* ZwischenPuffer = new char[1000];
    char* DoublePuffer = new char[1000];
    bool Zahl = false;

    //ZwischenPuffer füllen
    ZwischenPuffer = Puffer.substr (nPosition);

    //Ab dem ersten nicht-Zahlzeichen abschneiden
    for (size_t i = 0; i &lt; ZwischenPuffer.length(); i++)
    {
        Zahl = false;

        switch (ZwischenPuffer[i])
        {
            case &quot;0&quot;:
                Zahl = true;
                break;
            case &quot;1&quot;:
                Zahl = true;
                break;
            case &quot;2&quot;:
                Zahl = true;
                break;
            case &quot;3&quot;:
                Zahl = true;
                break;
            case &quot;4&quot;:
                Zahl = true;
                break;
            case &quot;5&quot;:
                Zahl = true;
                break;
            case &quot;6&quot;:
                Zahl = true;
                break;
            case &quot;7&quot;:
                Zahl = true;
                break;
            case &quot;8&quot;:
                Zahl = true;
                break;
            case &quot;9&quot;:
                Zahl = true;
                break;
            case &quot;.&quot;:
                Zahl = true;
                break;
            default:
                break;
        }

        //Wenn Zahl zu Ende, zusammenkopieren
        if(!Zahl)
        {
            DoublePuffer = ZwischenPuffer.substr (0, (i - 1));
            i = ZwischenPuffer.length(); //Schleife beenden
        }
    }
    //In int umwandeln
    Double = atof(DoublePuffer);

    return Double;
}

char* ConfigLoad::ReadString(size_t nPosition) const
{
    char* ZwischenPuffer = new char[1000];
    char* EndPuffer = new char[1000];
    bool Leerzeichen = false;

    //ZischenPuffer füllen
    ZwischenPuffer = Puffer.substr (nPosition);

    //Ab dem ersten nicht-Zeichen abschneiden
    for (size_t i = 0; i &lt; ZwischenPuffer.length(); i++)
    {
        Leerzeichen = false;

        switch (ZwischenPuffer[i])
        {
            case &quot; &quot;:
                Leerzeichen = true;
                break;
            case &quot;\0&quot;:
                Leerzeichen = true;
                break;
            case &quot;\r&quot;:
                Leerzeichen = true;
                break;
            case &quot;\n&quot;:
                Leerzeichen = true;
                break;
            case &quot;\t&quot;:
                Leerzeichen = true;
                break;
            case &quot;&quot;:
                Leerzeichen = true;
                break;
            default:
                break;
        }

        //Wenn Zahl zu Ende, zusammenkopieren
        if(Leerzeichen)
        {
            EndPuffer = ZwischenPuffer.substr (0, (i - 1));
            i = ZwischenPuffer.length(); //Schleife beenden
        }
    }

    return EndPuffer;
}
</code></pre>
<p>Egal was ich amche, ich hab auch schon einmal alle Semikolons überprüft, weil Google das als Fehlerquelle vorgeschlagen hat. Ich erhalte immer:</p>
<pre><code>C:\Programme\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\iostream|48|error: expected unqualified-id before &quot;namespace&quot;|
C:\Eigene Dateien\C++\Projekte\Dateientest\Test.cpp||In function `int main(int, char**)':|
C:\Eigene Dateien\C++\Projekte\Dateientest\Test.cpp|11|error: `cout' was not declared in this scope|
C:\Eigene Dateien\C++\Projekte\Dateientest\Test.cpp|11|warning: unused variable 'cout'|
C:\Eigene Dateien\C++\Projekte\Dateientest\Test.cpp|13|error: `cout' was not declared in this scope|
C:\Eigene Dateien\C++\Projekte\Dateientest\Test.cpp|13|warning: unused variable 'cout'|
||=== Build finished: 3 errors, 2 warnings ===|
</code></pre>
<p>Woran kann das liegen? Wie gesagt, bei Google hab ich nur den Fehler gefunden, dass ein Semikolon irgendwo fehlt, aber ich finde kein Fehlendes.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/247812/unsichtbarer-fehler</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 10:59:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/247812.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 16 Aug 2009 00:31:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unsichtbarer Fehler on Sun, 16 Aug 2009 00:31:28 GMT]]></title><description><![CDATA[<p>Hi,<br />
mein Fehler wird zwar in &lt;iostream&gt; gemeldet, muss aber ein normaler C++-Fehler sein. Eigentlich wollte ich testen, ob miene Dateiausleseklasse funktioniert, aber das scheitert jetzt an der Standardausgabe^^.</p>
<p>Meine Hauptdatei &quot;Test.cpp&quot;:</p>
<pre><code class="language-cpp">#include &quot;ConfigLaden.h&quot;
#include &lt;iostream&gt;
using namespace std;

int main (int nNumberofArgs, char* pszArgs[])
{
    ConfigLoad Test(&quot;Pups.txt&quot;);
    Test.ReadNextLine();
    if (Test.FoundString(&quot;Hallo!&quot;))
    {
        cout &lt;&lt; &quot;Tada!&quot;;
    } else {
        cout &lt;&lt; &quot;Geht net&quot;;
    }
    return 0;
}
</code></pre>
<p>Die &quot;ConfigLaden.h&quot;:</p>
<pre><code class="language-cpp">#ifndef _CONFLADEN_H_
#define _CONFLADEN_H_
#include &lt;string&gt;
#include &lt;fstream&gt;

using namespace std;

class ConfigLoad
{
    private:
        char* Puffer;
        ifstream *pKonfiguration;

    public:
        ConfigLoad(char* file);
        void ReadNextLine();
        bool FoundString(char* search) const;
        size_t StringPos(char* search) const;
        int ReadInt(size_t nPosition) const;//Bis kein Zahlzeichen mehr kommt
        double ReadDouble(size_t nPosition) const;
        char* ReadString(size_t nPosition) const;
}
#endif
</code></pre>
<p>Und die &quot;ConfigLaden.cpp&quot;, gekürzt, damits nicht zu lange wird:</p>
<pre><code class="language-cpp">//using namespace std;

ConfigLoad::ConfigLoad(char* file)
{
    Puffer = new char[1000];

    //Datei öffnen
    pKonfiguration = new ifstream (file);

    //Fehlerkontrolle
    if (!pKonfiguration -&gt; good())
    {
        delete pKonfiguration;
        cout &lt;&lt; &quot; konnte nicht geöffnet werden.&quot;;
    }
}

void ConfigLoad::ReadNextLine()
{
    if (!pKonfiguration -&gt; eof())
    {
        pKonfiguration -&gt; getline(Puffer, 1000);
    }
}

bool ConfigLoad::FoundString(char* search) const
{
    bool found = false;
    size_t position = 1000;

    //Suchen
    position = Puffer.find(search);
    if (position != 1000)
    {
        found = true;
    }

    return found;
}

size_t ConfigLoad::StringPos(char* search) const
{
    size_t found = 0;

    //Suchen
    found = Puffer.find(search);
    found += search.length();

    return found;
}

int ConfigLoad::ReadInt(size_t nPosition) const
{
    int Integer = 0;
    char* ZwischenPuffer = new char[1000];
    char* IntPuffer = new char[1000];
    bool Zahl = false;

    //ZwischenPuffer füllen
    ZwischenPuffer = Puffer.substr (nPosition);

    //Ab dem ersten nicht-Zahlzeichen abschneiden
    for (size_t i = 0; i &lt; ZwischenPuffer.length(); i++)
    {
        Zahl = false;

        switch (ZwischenPuffer[i])
        {
            case &quot;0&quot;:
                Zahl = true;
                break;
            case &quot;1&quot;:
                Zahl = true;
                break;
            case &quot;2&quot;:
                Zahl = true;
                break;
            case &quot;3&quot;:
                Zahl = true;
                break;
            case &quot;4&quot;:
                Zahl = true;
                break;
            case &quot;5&quot;:
                Zahl = true;
                break;
            case &quot;6&quot;:
                Zahl = true;
                break;
            case &quot;7&quot;:
                Zahl = true;
                break;
            case &quot;8&quot;:
                Zahl = true;
                break;
            case &quot;9&quot;:
                Zahl = true;
                break;
            default:
                break;
        }

        //Wenn Zahl zu Ende, zusammenkopieren
        if(!Zahl)
        {
            IntPuffer = ZwischenPuffer.substr (0, (i - 1));
            i = ZwischenPuffer.length(); //Schleife beenden
        }
    }
    //In int umwandeln
    Integer = atoi(IntPuffer);

    return Integer;
}

double ConfigLoad::ReadDouble(size_t nPosition) const
{
    double Double = 0.0;
    char* ZwischenPuffer = new char[1000];
    char* DoublePuffer = new char[1000];
    bool Zahl = false;

    //ZwischenPuffer füllen
    ZwischenPuffer = Puffer.substr (nPosition);

    //Ab dem ersten nicht-Zahlzeichen abschneiden
    for (size_t i = 0; i &lt; ZwischenPuffer.length(); i++)
    {
        Zahl = false;

        switch (ZwischenPuffer[i])
        {
            case &quot;0&quot;:
                Zahl = true;
                break;
            case &quot;1&quot;:
                Zahl = true;
                break;
            case &quot;2&quot;:
                Zahl = true;
                break;
            case &quot;3&quot;:
                Zahl = true;
                break;
            case &quot;4&quot;:
                Zahl = true;
                break;
            case &quot;5&quot;:
                Zahl = true;
                break;
            case &quot;6&quot;:
                Zahl = true;
                break;
            case &quot;7&quot;:
                Zahl = true;
                break;
            case &quot;8&quot;:
                Zahl = true;
                break;
            case &quot;9&quot;:
                Zahl = true;
                break;
            case &quot;.&quot;:
                Zahl = true;
                break;
            default:
                break;
        }

        //Wenn Zahl zu Ende, zusammenkopieren
        if(!Zahl)
        {
            DoublePuffer = ZwischenPuffer.substr (0, (i - 1));
            i = ZwischenPuffer.length(); //Schleife beenden
        }
    }
    //In int umwandeln
    Double = atof(DoublePuffer);

    return Double;
}

char* ConfigLoad::ReadString(size_t nPosition) const
{
    char* ZwischenPuffer = new char[1000];
    char* EndPuffer = new char[1000];
    bool Leerzeichen = false;

    //ZischenPuffer füllen
    ZwischenPuffer = Puffer.substr (nPosition);

    //Ab dem ersten nicht-Zeichen abschneiden
    for (size_t i = 0; i &lt; ZwischenPuffer.length(); i++)
    {
        Leerzeichen = false;

        switch (ZwischenPuffer[i])
        {
            case &quot; &quot;:
                Leerzeichen = true;
                break;
            case &quot;\0&quot;:
                Leerzeichen = true;
                break;
            case &quot;\r&quot;:
                Leerzeichen = true;
                break;
            case &quot;\n&quot;:
                Leerzeichen = true;
                break;
            case &quot;\t&quot;:
                Leerzeichen = true;
                break;
            case &quot;&quot;:
                Leerzeichen = true;
                break;
            default:
                break;
        }

        //Wenn Zahl zu Ende, zusammenkopieren
        if(Leerzeichen)
        {
            EndPuffer = ZwischenPuffer.substr (0, (i - 1));
            i = ZwischenPuffer.length(); //Schleife beenden
        }
    }

    return EndPuffer;
}
</code></pre>
<p>Egal was ich amche, ich hab auch schon einmal alle Semikolons überprüft, weil Google das als Fehlerquelle vorgeschlagen hat. Ich erhalte immer:</p>
<pre><code>C:\Programme\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\iostream|48|error: expected unqualified-id before &quot;namespace&quot;|
C:\Eigene Dateien\C++\Projekte\Dateientest\Test.cpp||In function `int main(int, char**)':|
C:\Eigene Dateien\C++\Projekte\Dateientest\Test.cpp|11|error: `cout' was not declared in this scope|
C:\Eigene Dateien\C++\Projekte\Dateientest\Test.cpp|11|warning: unused variable 'cout'|
C:\Eigene Dateien\C++\Projekte\Dateientest\Test.cpp|13|error: `cout' was not declared in this scope|
C:\Eigene Dateien\C++\Projekte\Dateientest\Test.cpp|13|warning: unused variable 'cout'|
||=== Build finished: 3 errors, 2 warnings ===|
</code></pre>
<p>Woran kann das liegen? Wie gesagt, bei Google hab ich nur den Fehler gefunden, dass ein Semikolon irgendwo fehlt, aber ich finde kein Fehlendes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761566</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Sun, 16 Aug 2009 00:31:28 GMT</pubDate></item><item><title><![CDATA[Reply to Unsichtbarer Fehler on Sun, 16 Aug 2009 01:35:16 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class ConfigLoad
{

};&lt;-------------------------- da :)
</code></pre>
<p>kleiner tip um solche fehler zu vermeiden:<br />
binde zuerst die standardheader ein und dann deine eigenen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761570</guid><dc:creator><![CDATA[Sovok]]></dc:creator><pubDate>Sun, 16 Aug 2009 01:35:16 GMT</pubDate></item><item><title><![CDATA[Reply to Unsichtbarer Fehler on Sun, 16 Aug 2009 06:06:22 GMT]]></title><description><![CDATA[<p>...und verwende kein &quot;using ...;&quot; im globalen Namensraum eines Headers.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761585</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sun, 16 Aug 2009 06:06:22 GMT</pubDate></item><item><title><![CDATA[Reply to Unsichtbarer Fehler on Sun, 16 Aug 2009 10:17:49 GMT]]></title><description><![CDATA[<p>Kleiner Tipp: Du könntest die <code>ReadInt</code> , <code>ReadDouble</code> und <code>ReadString</code> Methoden kürzer schreiben, wenn du einfach die entsprechenden Funktionen aus dem <code>&lt;cctype&gt;</code> -Header verwenden würdest.<br />
<a href="http://www.cplusplus.com/reference/clibrary/cctype/" rel="nofollow">http://www.cplusplus.com/reference/clibrary/cctype/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761625</guid><dc:creator><![CDATA[Mizar]]></dc:creator><pubDate>Sun, 16 Aug 2009 10:17:49 GMT</pubDate></item><item><title><![CDATA[Reply to Unsichtbarer Fehler on Sun, 16 Aug 2009 13:19:27 GMT]]></title><description><![CDATA[<p>Danke für eure Lösungen und Hilfen. Hab jetzt auch &lt;cctype&gt; verwendet, sehr nützlich :). Aber es erkennt die Funktionen find, length und substr nicht. Die Fehlermeldung ist (für mich zumindest <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="😉"
    /> ) kurios. Ich würde mal tippen er hat wieder irgendwelche Probleme mit dem namespace oder meiner Dateiausleseklasse. Aber ich werde nicht schlau, wo genau er die Funktionen sucht und wo sie zu finden sein sollten. Also hier nochmal nur die gekürzte &quot;ConfigLaden.cpp&quot;:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;cctype&gt;
#include &quot;ConfigLaden.h&quot;

//using namespace std;

ConfigLoad::ConfigLoad(char* file)
{
    Puffer = new char[1000];

    //Datei öffnen
    pKonfiguration = new std::ifstream (file);

    //Fehlerkontrolle
    if (!pKonfiguration -&gt; good())
    {
        delete pKonfiguration;
        std::cout &lt;&lt; &quot; konnte nicht geöffnet werden.&quot;;
    }
}

void ConfigLoad::ReadNextLine()
{
    if (!pKonfiguration -&gt; eof())
    {
        pKonfiguration -&gt; getline(Puffer, 1000);
    }
}

bool ConfigLoad::FoundString(char* search) const
{
    bool found = false;
    size_t position = 1000;

    //Suchen
    position = Puffer.find(search);
    if (position != 1000)
    {
        found = true;
    }

    return found;
}

size_t ConfigLoad::StringPos(char* search) const
{
    size_t found = 0;

    //Suchen
    found = Puffer.find(search);
    found += search.length();

    return found;
}

int ConfigLoad::ReadInt(size_t nPosition) const
{
    int Integer = 0;
    char* ZwischenPuffer = new char[1000];
    char* IntPuffer = new char[1000];
    bool Zahl = false;

    //ZwischenPuffer füllen
    ZwischenPuffer = Puffer.substr (nPosition);

    //Ab dem ersten nicht-Zahlzeichen abschneiden
    for (size_t i = 0; i &lt; ZwischenPuffer.length(); i++)
    {
        Zahl = false;

        if(isdigit(ZwischenPuffer[i]))
        {
            Zahl = true;
        }

        //Wenn Zahl zu Ende, zusammenkopieren
        if(!Zahl)
        {
            IntPuffer = ZwischenPuffer.substr (0, (i - 1));
            i = ZwischenPuffer.length(); //Schleife beenden
        }
    }
    //In int umwandeln
    Integer = atoi(IntPuffer);

    return Integer;
}

double ConfigLoad::ReadDouble(size_t nPosition) const
{
    double Double = 0.0;
    char* ZwischenPuffer = new char[1000];
    char* DoublePuffer = new char[1000];
    bool Zahl = false;

    //ZwischenPuffer füllen
    ZwischenPuffer = Puffer.substr (nPosition);

    //Ab dem ersten nicht-Zahlzeichen abschneiden
    for (size_t i = 0; i &lt; ZwischenPuffer.length(); i++)
    {
        Zahl = false;

        if (isdigit(ZwischenPuffer[i]))
        {
            Zahl = true;
        }

        if (ZwischenPuffer[i] == &quot;.&quot;)
        {
            Zahl = true;
        }

        //Wenn Zahl zu Ende, zusammenkopieren
        if(!Zahl)
        {
            DoublePuffer = ZwischenPuffer.substr (0, (i - 1));
            i = ZwischenPuffer.length(); //Schleife beenden
        }
    }
    //In int umwandeln
    Double = atof(DoublePuffer);

    return Double;
}

char* ConfigLoad::ReadString(size_t nPosition) const
{
    char* ZwischenPuffer = new char[1000];
    char* EndPuffer = new char[1000];
    bool Leerzeichen = false;

    //ZischenPuffer füllen
    ZwischenPuffer = Puffer.substr (nPosition);

    //Ab dem ersten nicht-Zeichen abschneiden
    for (size_t i = 0; i &lt; ZwischenPuffer.length(); i++)
    {
        Leerzeichen = false;

        if (isspace(ZwischenPuffer[i]))
        {
            Leerzeichen = true;
        }

        //Wenn Zahl zu Ende, zusammenkopieren
        if(Leerzeichen)
        {
            EndPuffer = ZwischenPuffer.substr (0, (i - 1));
            i = ZwischenPuffer.length(); //Schleife beenden
        }
    }

    return EndPuffer;
}
</code></pre>
<p>Und die Fehlermeldungen:</p>
<pre><code>ConfigLaden.cpp||In member function `bool ConfigLoad::FoundString(char*) const':|
ConfigLaden.cpp|39|error: request for member `find' in `((const ConfigLoad*)this)-&gt;ConfigLoad::Puffer', which is of non-class type `char* const'|
ConfigLaden.cpp||In member function `size_t ConfigLoad::StringPos(char*) const':|
ConfigLaden.cpp|53|error: request for member `find' in `((const ConfigLoad*)this)-&gt;ConfigLoad::Puffer', which is of non-class type `char* const'|
ConfigLaden.cpp|54|error: request for member `length' in `search', which is of non-class type `char*'|
ConfigLaden.cpp||In member function `int ConfigLoad::ReadInt(size_t) const':|
ConfigLaden.cpp|67|error: request for member `substr' in `((const ConfigLoad*)this)-&gt;ConfigLoad::Puffer', which is of non-class type `char* const'|
ConfigLaden.cpp|70|error: request for member `length' in `ZwischenPuffer', which is of non-class type `char*'|
ConfigLaden.cpp|82|error: request for member `substr' in `ZwischenPuffer', which is of non-class type `char*'|
ConfigLaden.cpp|83|error: request for member `length' in `ZwischenPuffer', which is of non-class type `char*'|
ConfigLaden.cpp||In member function `double ConfigLoad::ReadDouble(size_t) const':|
ConfigLaden.cpp|100|error: request for member `substr' in `((const ConfigLoad*)this)-&gt;ConfigLoad::Puffer', which is of non-class type `char* const'|
ConfigLaden.cpp|103|error: request for member `length' in `ZwischenPuffer', which is of non-class type `char*'|
ConfigLaden.cpp|120|error: request for member `substr' in `ZwischenPuffer', which is of non-class type `char*'|
ConfigLaden.cpp|121|error: request for member `length' in `ZwischenPuffer', which is of non-class type `char*'|
ConfigLaden.cpp||In member function `char* ConfigLoad::ReadString(size_t) const':|
ConfigLaden.cpp|137|error: request for member `substr' in `((const ConfigLoad*)this)-&gt;ConfigLoad::Puffer', which is of non-class type `char* const'|
ConfigLaden.cpp|140|error: request for member `length' in `ZwischenPuffer', which is of non-class type `char*'|
ConfigLaden.cpp|152|error: request for member `substr' in `ZwischenPuffer', which is of non-class type `char*'|
ConfigLaden.cpp|153|error: request for member `length' in `ZwischenPuffer', which is of non-class type `char*'|
||=== Build finished: 16 errors, 0 warnings ===|
</code></pre>
<p>Ich werd da echt nicht schlau draus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761713</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Sun, 16 Aug 2009 13:19:27 GMT</pubDate></item><item><title><![CDATA[Reply to Unsichtbarer Fehler on Sun, 16 Aug 2009 13:17:09 GMT]]></title><description><![CDATA[<p>Solltest du aber ...</p>
<blockquote>
<p>error: request for member `find' in `((const ConfigLoad*)this)-&gt;ConfigLoad::Puffer', which is of non-class type `char* const'</p>
</blockquote>
<p>ist doche eindeutig.<br />
Du behandelst nen const char* wie ein Objekt... Der &quot;Puffer&quot; sollte vllt ein std::string sein?!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761721</guid><dc:creator><![CDATA[OMGler]]></dc:creator><pubDate>Sun, 16 Aug 2009 13:17:09 GMT</pubDate></item><item><title><![CDATA[Reply to Unsichtbarer Fehler on Sun, 16 Aug 2009 13:30:20 GMT]]></title><description><![CDATA[<p>Ich hatte den Puffer erst als String, aber C++ lässt nicht zu, dass ich den Filestream in einen String auslese:</p>
<pre><code>C:\Eigene Dateien\C++\Projekte\Dateientest\ConfigLaden.cpp||In member function `void ConfigLoad::ReadNextLine()':|
ConfigLaden.cpp|31|error: no matching function for call to `std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;::getline(std::string&amp;, int)'|
C:\Programme\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\istream.tcc|582|note: candidates are: std::basic_istream&lt;_CharT, _Traits&gt;&amp; std::basic_istream&lt;_CharT, _Traits&gt;::getline(_CharT*, std::streamsize, _CharT) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]|
C:\Programme\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\istream|399|note:                 std::basic_istream&lt;_CharT, _Traits&gt;&amp; std::basic_istream&lt;_CharT, _Traits&gt;::getline(_CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]|
</code></pre>
<p>Gibt es einen Weg, ein char-Array in einen String umzuwandeln?</p>
<p>Die anderen Puffer sind immer noch char-Arrays und mit einem einfachen &quot;=&quot;, wie hier:</p>
<pre><code class="language-cpp">ZwischenPuffer = Puffer.substr (nPosition);
</code></pre>
<p>will er die Umwandlung nicht machen:</p>
<pre><code>C:\Eigene Dateien\C++\Projekte\Dateientest\ConfigLaden.cpp|69|error: cannot convert `std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;' to `char*' in assignment|
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1761728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761728</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Sun, 16 Aug 2009 13:30:20 GMT</pubDate></item><item><title><![CDATA[Reply to Unsichtbarer Fehler on Sun, 16 Aug 2009 13:39:39 GMT]]></title><description><![CDATA[<p>Little Programmer schrieb:</p>
<blockquote>
<p>Gibt es einen Weg, ein char-Array in einen String umzuwandeln?</p>
<p>Die anderen Puffer sind immer noch char-Arrays und mit einem einfachen &quot;=&quot;, wie hier:</p>
<pre><code class="language-cpp">ZwischenPuffer = Puffer.substr (nPosition);
</code></pre>
<p>will er die Umwandlung nicht machen:</p>
<pre><code>C:\Eigene Dateien\C++\Projekte\Dateientest\ConfigLaden.cpp|69|error: cannot convert `std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;' to `char*' in assignment|
</code></pre>
</blockquote>
<p>Mannmannmann... Wieso denn char* umwandeln in string?!? Verwende einen std::string! char*::find gibt es einfach nicht, da bracuht man sich nicht wundern.</p>
<p>Und genau so liest du aus nem std::istream in einen std::string:<br />
<a href="http://www.cplusplus.com/reference/string/getline/" rel="nofollow">http://www.cplusplus.com/reference/string/getline/</a></p>
<p>Solltest echt noch etwas in deinem C++-Buch schmökern, bevor du dich an solch &quot;komplexe&quot; Programme ransetzt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761733</guid><dc:creator><![CDATA[OMGler]]></dc:creator><pubDate>Sun, 16 Aug 2009 13:39:39 GMT</pubDate></item><item><title><![CDATA[Reply to Unsichtbarer Fehler on Sun, 16 Aug 2009 13:56:46 GMT]]></title><description><![CDATA[<p>Einem ehemaligen Java-Programmierer und jetzigen C++-Programmierer (wie mir) fällt sofort auf, dass Du versuchst, in C++ Java zu programmieren. Das ist eine ganz schlechte Idee. Folgende Macken hat dein Programm:</p>
<ul>
<li><em>Viel zu viele</em> <code>new</code> s und <code>new[]</code> s</li>
<li><em>Viel zu viele</em> Zeiger</li>
<li>Zuviel <code>char*</code></li>
<li>Speicher- und Resource-Lecks</li>
<li>Ein impliziter Konstruktor, der ein expliziter sein sollte</li>
<li>Misachtung der <a href="http://de.wikipedia.org/wiki/Dreierregel_(C%2B%2B)" rel="nofollow">Dreierregel</a></li>
<li>Puffer ist vom Typ char* und besitzt keine Elementfunktionen (wie zB &quot;find&quot;)</li>
</ul>
<p>Dir ist scheinbar das <a href="http://de.wikipedia.org/wiki/Ressourcenbelegung_ist_Initialisierung" rel="nofollow">RAII</a>-Konzept noch nicht bekannt. Unbedingt nachholen! <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="🙂"
    /> In C++ kapselt man die Verwaltung einer einzelnen Resource in der Regel in einem dedizierten Objekt (zB <code>std::string</code> oder <code>std::ifstream</code> ).</p>
<p>Objekte, die &quot;logisch&quot; gesehen Mitglieder eines anderen Objektes sind, sollten es auch &quot;praktisch&quot; sein, sofern möglich -- also direkte Objekt-Mitglieder, statt nur über private Zeiger erreichbar.</p>
<pre><code class="language-cpp">class foo {
    ...
    std::ifstream dings; // &lt;-- muss kein Zeiger sein
    ...
  };
</code></pre>
<p>Es gibt natürlich ausnahmen (Polymorphie, Compiler-Firewall). In Deinem Fall ist aber ein Zeiger auf ein ifstream Objekt unnötig. Du erzeugst dieses Objekt direkt im Konstruktor selbst. Es kann genauso gut ein &quot;echtes&quot; Objekt-Element sein.</p>
<p>BTW: Konstruktoren dürfen auch Exceptions schmeißen.</p>
<p>Tipp: Schnapp Dir ein gutes Buch zum Thema C++. Du kannst Dir damit viel Zeit und Ärger ersparen. Du tappst im Moment im Dunkeln. Ein Buch kann hier sehr erhellend sein und Dir den Weg leuchten -- mal metaphorisch gesprochen.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761742</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sun, 16 Aug 2009 13:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to Unsichtbarer Fehler on Sun, 16 Aug 2009 14:32:34 GMT]]></title><description><![CDATA[<p>Ich hab die Exceptions mit Absicht hier raus geworfen. Das ist eigentlich Teil einer anderen Anwendung, in der es aber noch eine Weile dauert, bis sie eine Ausgabe hat. Ich nehme hier mit Absicht nur die Standardausgabe um die Funktionen erst einmal zu testen. Dann schreib ichs wieder um. Java hab ich noch nie geschrieben. Ich hatte auch erst ausschließlich strings anstatt char*, aber dann hat der Compiler nur noch gemeckert. Deshalb hatte ichs dann umgeändert.</p>
<p>@OMGler, ich benutze die getline-Funktion exakt so wie in der Referenz beschrieben und trotzdem bekomme ich die schon geposteten Fehlermeldungen. Der Fehler liegt irgendwo anders.</p>
<p>Ich schreib jetzt alles zum zweiten Mal zurück in String und mach den Filestreamzeiger zu nem Filestream.</p>
<p>Die &quot;ConfigLaden.cpp&quot; geht jetzt so:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;cctype&gt;
#include &quot;ConfigLaden.h&quot;

//using namespace std;

ConfigLoad::ConfigLoad(std::string file)
{
    //Puffer = new char[1000];

    Puffer = &quot;&quot;;

    //Datei öffnen
    std::ifstream Konfiguration(file);

    //Fehlerkontrolle
    if (!Konfiguration -&gt; good())
    {
        Konfiguration.close();
        std::cout &lt;&lt; &quot;Konnte nicht geoeffnet werden.&quot;;
    }
}

void ConfigLoad::ReadNextLine()
{
    if (!Konfiguration.eof())
    {
        Konfiguration.getline(Puffer, 1000);
    }
}

bool ConfigLoad::FoundString(std::string search) const
{
    bool found = false;
    size_t position = 1000;

    //Suchen
    position = Puffer.find(search);
    if (position != 1000)
    {
        found = true;
    }

    return found;
}

size_t ConfigLoad::StringPos(std::string search) const
{
    size_t found = 0;

    //Suchen
    found = Puffer.find(search);
    found += search.length();

    return found;
}

int ConfigLoad::ReadInt(size_t nPosition) const
{
    int Integer = 0;
    std::string ZwischenPuffer;
    std::string IntPuffer;
    bool Zahl = false;

    //ZwischenPuffer füllen
    ZwischenPuffer = Puffer.substr (nPosition);

    //Ab dem ersten nicht-Zahlzeichen abschneiden
    for (size_t i = 0; i &lt; ZwischenPuffer.length(); i++)
    {
        Zahl = false;

        if(isdigit(ZwischenPuffer[i]))
        {
            Zahl = true;
        }

        //Wenn Zahl zu Ende, zusammenkopieren
        if(!Zahl)
        {
            IntPuffer = ZwischenPuffer.substr (0, (i - 1));
            i = ZwischenPuffer.length(); //Schleife beenden
        }
    }
    //In int umwandeln
    Integer = atoi(IntPuffer);

    return Integer;
}

double ConfigLoad::ReadDouble(size_t nPosition) const
{
    double Double = 0.0;
    std::string ZwischenPuffer;
    std::string DoublePuffer;
    bool Zahl = false;

    //ZwischenPuffer füllen
    ZwischenPuffer = Puffer.substr (nPosition);

    //Ab dem ersten nicht-Zahlzeichen abschneiden
    for (size_t i = 0; i &lt; ZwischenPuffer.length(); i++)
    {
        Zahl = false;

        if (isdigit(ZwischenPuffer[i]))
        {
            Zahl = true;
        }

        if (ZwischenPuffer[i] == '.')
        {
            Zahl = true;
        }

        //Wenn Zahl zu Ende, zusammenkopieren
        if(!Zahl)
        {
            DoublePuffer = ZwischenPuffer.substr (0, (i - 1));
            i = ZwischenPuffer.length(); //Schleife beenden
        }
    }
    //In int umwandeln
    Double = atof(DoublePuffer);

    return Double;
}

std::string ConfigLoad::ReadString(size_t nPosition) const
{
    std::string ZwischenPuffer;
    std::string EndPuffer;
    bool Leerzeichen = false;

    //ZischenPuffer füllen
    ZwischenPuffer = Puffer.substr (nPosition);

    //Ab dem ersten nicht-Zeichen abschneiden
    for (size_t i = 0; i &lt; ZwischenPuffer.length(); i++)
    {
        Leerzeichen = false;

        if (isspace(ZwischenPuffer[i]))
        {
            Leerzeichen = true;
        }

        //Wenn Zahl zu Ende, zusammenkopieren
        if(Leerzeichen)
        {
            EndPuffer = ZwischenPuffer.substr (0, (i - 1));
            i = ZwischenPuffer.length(); //Schleife beenden
        }
    }

    return EndPuffer;
}
</code></pre>
<p>Die Fehlermeldungen: Der Compiler sucht basic_ifstream anstatt ifstream und die atoi und atof Funktionen funktionieren mit Strings nicht.</p>
<pre><code>ConfigLaden.cpp||In constructor `ConfigLoad::ConfigLoad(std::string)':|
ConfigLaden.cpp|17|error: `ifstream' was not declared in this scope|
ConfigLaden.cpp|17|error: expected `;' before &quot;Konfiguration&quot;|
ConfigLaden.cpp|20|error: base operand of `-&gt;' has non-pointer type `std::ifstream'|
ConfigLaden.cpp|17|warning: unused variable 'ifstream'|
ConfigLaden.cpp||In member function `void ConfigLoad::ReadNextLine()':|
ConfigLaden.cpp|31|error: no matching function for call to `std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;::getline(std::string&amp;, int)'|
istream.tcc|582|note: candidates are: std::basic_istream&lt;_CharT, _Traits&gt;&amp; std::basic_istream&lt;_CharT, _Traits&gt;::getline(_CharT*, std::streamsize, _CharT) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]|
istream|399|note:                 std::basic_istream&lt;_CharT, _Traits&gt;&amp; std::basic_istream&lt;_CharT, _Traits&gt;::getline(_CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]|
ConfigLaden.cpp||In member function `int ConfigLoad::ReadInt(size_t) const':|
ConfigLaden.cpp|89|error: cannot convert `std::string' to `const char*' for argument `1' to `int atoi(const char*)'|
ConfigLaden.cpp||In member function `double ConfigLoad::ReadDouble(size_t) const':|
ConfigLaden.cpp|127|error: cannot convert `std::string' to `const char*' for argument `1' to `double atof(const char*)'|
||=== Build finished: 6 errors, 1 warnings ===|
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1761756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761756</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Sun, 16 Aug 2009 14:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to Unsichtbarer Fehler on Sun, 16 Aug 2009 14:42:40 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#ifndef MYCONFIGLOADER_H
#define MYCONFIGLOADER_H

#include &lt;fstream&gt;
#include &lt;string&gt;

class ConfigLoad 
{ 
public:
	ConfigLoad(const std::string&amp; filename);
    bool ReadNextLine();
	bool FoundString(const std::string&amp; search) const;
	std::string::size_type StringPos(const std::string&amp; search) const;
	int ReadInt(std::string::size_type nPosition) const;
	double ReadDouble(std::string::size_type nPosition) const; 
	std::string ReadString(std::string::size_type nPosition) const;
private:
	std::string puffer;
	std::ifstream konfiguration;
};

#endif // MYCONFIGLOADER_H
</code></pre>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
#include &lt;string&gt;
#include &lt;cctype&gt;
#include &quot;configloader.h&quot;

ConfigLoad::ConfigLoad(const std::string&amp; filename):
konfiguration(filename.c_str())
{
    if(!konfiguration)
        std::cerr &lt;&lt; &quot;Konnte nicht geoeffnet werden.\n&quot;; 
}

bool ConfigLoad::ReadNextLine() 
{
	if(std::getline(konfiguration, puffer))
		return true;
	return false;
} 

bool ConfigLoad::FoundString(const std::string&amp; search) const 
{
	return puffer.find(search) != std::string::npos;
}

std::string::size_type ConfigLoad::StringPos(const std::string&amp; search) const 
{
	return puffer.find(search);
}

int ConfigLoad::ReadInt(std::string::size_type nPosition) const 
{
	int ret_int(0);
	for(std::string::size_type beg(nPosition), end(puffer.size()); beg &lt; end; ++beg) {
		if(!isdigit(puffer[beg]) || beg + 1 == end) {
			std::istringstream iss(puffer.substr(nPosition, beg + 1));
			iss &gt;&gt; ret_int;
			break;
		}
	}
    return ret_int;
} 

double ConfigLoad::ReadDouble(std::string::size_type nPosition) const 
{ 
	double ret_double(0.0);
	for(std::string::size_type beg(nPosition), end(puffer.size()); beg &lt; end; ++beg) {
		if((!isdigit(puffer[beg]) &amp;&amp; puffer[beg] != '.') || beg + 1 == end) {
			std::istringstream iss(puffer.substr(nPosition, beg + 1));
			iss &gt;&gt; ret_double;
			break;
		}
	}
    return ret_double;
} 

std::string ConfigLoad::ReadString(std::string::size_type nPosition) const 
{
	std::ostringstream oss;
	for(std::string::size_type beg(nPosition), end(puffer.size()); beg &lt; end; ++beg) {
		if(isspace(puffer[beg]) || beg + 1 == end) {
			oss.str(puffer.substr(nPosition, beg + 1));
			break;
		}
	}
    return oss.str();
}
</code></pre>
<pre><code class="language-cpp">#include &quot;configloader.h&quot;
#include &lt;iostream&gt;

int main()
{ 
    ConfigLoad config(&quot;test.txt&quot;);
	while(config.ReadNextLine()) {
		if(config.FoundString(&quot;Hallo&quot;))
			std::cout &lt;&lt; &quot;Begruessung in dieser Zeile vorhanden.&quot; &lt;&lt; std::endl;
		else
			std::cout &lt;&lt; &quot;Keine Begruessung vorhanden.&quot; &lt;&lt; std::endl;

		std::cout &lt;&lt; &quot;Lese int an Position 0: &quot; &lt;&lt; config.ReadInt(0) &lt;&lt; std::endl;
		std::cout &lt;&lt; &quot;Lese double an Position 0: &quot; &lt;&lt; config.ReadDouble(0) &lt;&lt; std::endl;
		std::cout &lt;&lt; &quot;Lese Wort an Position 0: &quot; &lt;&lt; config.ReadString(0) &lt;&lt; std::endl;
	}
}
</code></pre>
<p>test.txt</p>
<pre><code>test
test Hallo test
87 noch ein Hallo test
kein test
92.4
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1761762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761762</guid><dc:creator><![CDATA[Krise]]></dc:creator><pubDate>Sun, 16 Aug 2009 14:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to Unsichtbarer Fehler on Sun, 16 Aug 2009 15:06:36 GMT]]></title><description><![CDATA[<p>Little Programmer schrieb:</p>
<blockquote>
<p>@OMGler, ich benutze die getline-Funktion exakt so wie in der Referenz beschrieben und trotzdem bekomme ich die schon geposteten Fehlermeldungen. Der Fehler liegt irgendwo anders.</p>
</blockquote>
<p>Du benutzt die eben genau nicht so wie in dem von mir geposteten Link.<br />
Um dir das Rumsuchen zu ersparen, hier exakt das Beispiel, wie es im Link unten steht:</p>
<pre><code class="language-cpp">// getline with strings
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

int main () {
  string str;
  cout &lt;&lt; &quot;Please enter full name: &quot;;
  getline (cin,str);
  cout &lt;&lt; &quot;Thank you, &quot; &lt;&lt; str &lt;&lt; &quot;.\n&quot;;
}
</code></pre>
<p>Und anstatt zu jammern, solltest du echt mal die Meldungen lesen und versuchen zu verstehen (ist nicht sooo schwer).<br />
Um das mal anzustoßen:</p>
<pre><code>error: `ifstream' was not declared in this scope|
</code></pre>
<p>Er kennt ifstream nicht. Was macht man da?</p>
<pre><code>error: expected `;' before &quot;Konfiguration&quot;
</code></pre>
<p>Folgefehler...</p>
<pre><code>ConfigLaden.cpp|20|error: base operand of `-&gt;' has non-pointer type `std::ifstream'|
</code></pre>
<p>operator-&gt; geht nur mit Pointern, und dein ifstream-Objekt ist ein non-pointer. Was macht man da?</p>
<p>Und nun:</p>
<pre><code>error: no matching function for call to `std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;::getline(std::string&amp;, int)'|
istream.tcc|582|note: candidates are: std::basic_istream&lt;_CharT, _Traits&gt;&amp; std::basic_istream&lt;_CharT, _Traits&gt;::getline(_CharT*, std::streamsize, _CharT) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]|
</code></pre>
<p>Das sagt mir, dass du getline nicht so verwendest wie du es vorgibst...</p>
<p>Ich hör mit den Fehlern hier mal auf, du hast echt nur ifstream* durch ifstream ersetzt, genauso wie die Deaklaration von Puffer in std::string umgemünzt, aber im Code nichts verändert. Hol das nach...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761768</guid><dc:creator><![CDATA[OMGler]]></dc:creator><pubDate>Sun, 16 Aug 2009 15:06:36 GMT</pubDate></item><item><title><![CDATA[Reply to Unsichtbarer Fehler on Sun, 16 Aug 2009 15:33:52 GMT]]></title><description><![CDATA[<p>Soweit verstanden, dass ifstream nicht erkannt wurde und der nächste Fehler ein Folgefehler ist, habe ich die Fehlermeldungen ja auch. Meine Frage war ja das Warum. Das mit dem -&gt; hatte ich übersehen.</p>
<p>@Krise, danke für's korrigieren. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> Ich werd das jetzt ein paar Mal durchlesen. Sehr lehrreich. <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/1761791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761791</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Sun, 16 Aug 2009 15:33:52 GMT</pubDate></item><item><title><![CDATA[Reply to Unsichtbarer Fehler on Sun, 16 Aug 2009 15:42:10 GMT]]></title><description><![CDATA[<p>null problemo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761796</guid><dc:creator><![CDATA[Krise]]></dc:creator><pubDate>Sun, 16 Aug 2009 15:42:10 GMT</pubDate></item></channel></rss>