<?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[[gelöst]Merkwürdiger Fehler in fstream (VC++ 2005 Express)]]></title><description><![CDATA[<p>Hi,<br />
ich hab grad in ner kleinen Logdatei Klasse nen Fehler, oder besser gesagt, als ich selbige Geschrieben hab, trat der Fehler auf.<br />
Die Fehlermeldung ist folgende:</p>
<pre><code>D:\Microsoft Visual Studio 8\VC\include\fstream(802) : error C2248: &quot;std::basic_ios&lt;_Elem,_Traits&gt;::basic_ios&quot;: Kein Zugriff auf private Member, dessen Deklaration in der std::basic_ios&lt;_Elem,_Traits&gt;-Klasse erfolgte.
        with
        [
            _Elem=char,
            _Traits=std::char_traits&lt;char&gt;
        ]
        D:\Microsoft Visual Studio 8\VC\include\ios(151): Siehe Deklaration von 'std::basic_ios&lt;_Elem,_Traits&gt;::basic_ios'
        with
        [
            _Elem=char,
            _Traits=std::char_traits&lt;char&gt;
        ]
        Diese Diagnose trat in der vom Compiler generierten Funktion &quot;std::basic_ofstream&lt;_Elem,_Traits&gt;::basic_ofstream(const std::basic_ofstream&lt;_Elem,_Traits&gt; &amp;)&quot; auf.
        with
        [
            _Elem=char,
            _Traits=std::char_traits&lt;char&gt;
        ]
</code></pre>
<p>Der Code Meiner Klasse ist:</p>
<pre><code class="language-cpp">#ifndef MyLog_h
#define MyLog_h

#include &quot;includes.h&quot;
#include &quot;fstream&quot;
#include &quot;string&quot;
using namespace std;

class MyLog
{
public:
	MyLog();
	MyLog(char* Logdateiname);
	~MyLog();

	void Write(const string Text);
private:
	ofstream Datei;
};

const MyLog operator&lt;&lt;(MyLog &amp;Log, const string &amp;rhs);
#endif
</code></pre>
<pre><code class="language-cpp">#ifndef MyLog_cpp
#define MyLog_cpp

#include &quot;includes.h&quot;
#include &quot;MyLog.h&quot;

#include &quot;fstream&quot;
#include &quot;string&quot;
using namespace std;

MyLog::MyLog()
{
	Datei.open(&quot;Log.txt&quot;, ios::out | ios::trunc);
}
MyLog::MyLog(char* Logdateiname)
{
	Datei.open(Logdateiname, ios::out | ios::trunc);
}
MyLog::~MyLog()
{
	Datei.close();
}
const MyLog operator&lt;&lt;(MyLog &amp;Log, const string &amp;rhs)
{
	Log.Write(rhs);
	return Log;
}
void MyLog::Write(const string Text)
{
	Datei &lt;&lt; Text;
}

#endif
</code></pre>
<p>Tja, komischerweise habe ich im selben Projekt fstream schon benutzt und da hat er nix gesagt.</p>
<p>Ich hoffe, das einer von euch ne Idee hat. Ich kann mir nicht vorstellen, dass MS wirklich nen so dummen Fehler in ne STL Klasse gebaut hat, zumals ja auch schon funktioniert hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/162170/gelöst-merkwürdiger-fehler-in-fstream-vc-2005-express</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 04:01:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/162170.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 15 Oct 2006 21:52:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst]Merkwürdiger Fehler in fstream (VC++ 2005 Express) on Mon, 16 Oct 2006 20:50:02 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich hab grad in ner kleinen Logdatei Klasse nen Fehler, oder besser gesagt, als ich selbige Geschrieben hab, trat der Fehler auf.<br />
Die Fehlermeldung ist folgende:</p>
<pre><code>D:\Microsoft Visual Studio 8\VC\include\fstream(802) : error C2248: &quot;std::basic_ios&lt;_Elem,_Traits&gt;::basic_ios&quot;: Kein Zugriff auf private Member, dessen Deklaration in der std::basic_ios&lt;_Elem,_Traits&gt;-Klasse erfolgte.
        with
        [
            _Elem=char,
            _Traits=std::char_traits&lt;char&gt;
        ]
        D:\Microsoft Visual Studio 8\VC\include\ios(151): Siehe Deklaration von 'std::basic_ios&lt;_Elem,_Traits&gt;::basic_ios'
        with
        [
            _Elem=char,
            _Traits=std::char_traits&lt;char&gt;
        ]
        Diese Diagnose trat in der vom Compiler generierten Funktion &quot;std::basic_ofstream&lt;_Elem,_Traits&gt;::basic_ofstream(const std::basic_ofstream&lt;_Elem,_Traits&gt; &amp;)&quot; auf.
        with
        [
            _Elem=char,
            _Traits=std::char_traits&lt;char&gt;
        ]
</code></pre>
<p>Der Code Meiner Klasse ist:</p>
<pre><code class="language-cpp">#ifndef MyLog_h
#define MyLog_h

#include &quot;includes.h&quot;
#include &quot;fstream&quot;
#include &quot;string&quot;
using namespace std;

class MyLog
{
public:
	MyLog();
	MyLog(char* Logdateiname);
	~MyLog();

	void Write(const string Text);
private:
	ofstream Datei;
};

const MyLog operator&lt;&lt;(MyLog &amp;Log, const string &amp;rhs);
#endif
</code></pre>
<pre><code class="language-cpp">#ifndef MyLog_cpp
#define MyLog_cpp

#include &quot;includes.h&quot;
#include &quot;MyLog.h&quot;

#include &quot;fstream&quot;
#include &quot;string&quot;
using namespace std;

MyLog::MyLog()
{
	Datei.open(&quot;Log.txt&quot;, ios::out | ios::trunc);
}
MyLog::MyLog(char* Logdateiname)
{
	Datei.open(Logdateiname, ios::out | ios::trunc);
}
MyLog::~MyLog()
{
	Datei.close();
}
const MyLog operator&lt;&lt;(MyLog &amp;Log, const string &amp;rhs)
{
	Log.Write(rhs);
	return Log;
}
void MyLog::Write(const string Text)
{
	Datei &lt;&lt; Text;
}

#endif
</code></pre>
<p>Tja, komischerweise habe ich im selben Projekt fstream schon benutzt und da hat er nix gesagt.</p>
<p>Ich hoffe, das einer von euch ne Idee hat. Ich kann mir nicht vorstellen, dass MS wirklich nen so dummen Fehler in ne STL Klasse gebaut hat, zumals ja auch schon funktioniert hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1155327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1155327</guid><dc:creator><![CDATA[Ger001]]></dc:creator><pubDate>Mon, 16 Oct 2006 20:50:02 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Merkwürdiger Fehler in fstream (VC++ 2005 Express) on Sun, 15 Oct 2006 22:55:11 GMT]]></title><description><![CDATA[<p>Der Fehler liegt hier:</p>
<pre><code class="language-cpp">const MyLog operator&lt;&lt;(MyLog &amp;Log, const string &amp;rhs)
{
    Log.Write(rhs);
    return Log;
}
</code></pre>
<p>Genauer gesagt beim Rückgabetyp. Du gibts nämlich keine Referenz zurück, wie es üblich ist, sondern eine Kopie von Log. Also mal schnell den Copy Constructor von MyLog nachschlagen... keinen geschrieben, d. h. der Standard-Copy-Ctor wird verwendet. Der ruft bekanntermaßen die Copy-Ctors für alle Felder von MyLog auf, also auch von Datei.</p>
<p>So ein ofstream hat jetzt aber die Eigenschaft, dass der Copy Ctor privat ist, dass man also einen ofstream nicht kopieren kann. Wieso das so ist, sollte einleuchtend sein, es handelt sich immerhin um ein Dateihandle inklusive Buffer. Wie auch immer, daher kommt deine Fehlermeldung.</p>
<p>Du umgehst diesen Fehler wie gesagt, indem du den Rückgabetyp zu einer Referenz machst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1155340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1155340</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 15 Oct 2006 22:55:11 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Merkwürdiger Fehler in fstream (VC++ 2005 Express) on Mon, 16 Oct 2006 20:19:16 GMT]]></title><description><![CDATA[<p>Herzlichen Dank <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="👍"
    /> !<br />
Die Erklärung leuchtet auch ein. Ich wäre auf alles gekommen, bestimmt aber nicht auf das.<br />
Da sieht man mal wieder was so ein kleines Zeichen ausmacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1155949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1155949</guid><dc:creator><![CDATA[Ger001]]></dc:creator><pubDate>Mon, 16 Oct 2006 20:19:16 GMT</pubDate></item></channel></rss>