<?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[operator&amp;lt;&amp;lt; überladen]]></title><description><![CDATA[<p>Ich möchte mir für die Ausgabe meiner MySQL Abfragen ein Objekt erstellen das mir das ganze in eine Datei ausgibt. dazu will den Operator &lt;&lt; überladen. Derzeit mach ich das ganze etwas unschön alles zusammen in einer Methode(ohen Objekt - im grunde will ich die druckausgabe jetzt objektbasiert erledigen):</p>
<pre><code class="language-cpp">void outputDB()
{
	//Elemente für die Liste
	#define	header &quot;-------------------------------------------------------------------------------\n|  ID|                      Nachname|                       Vorname|       Geb|\n-------------------------------------------------------------------------------\n&quot;
	#define footer &quot;*********************************Ende der Liste********************************&quot;;

	std::ofstream file(&quot;Mitarbeiter.dat&quot;);

	//Objekte für Datenbankabfrage erzeugen
	ConnectDB* myConnection = createConnection();
	SendRequestDB myReq;
	myReq.result = myReq.selectAll(myConnection-&gt;pConnection);
	destroyConnection(myConnection);

	//Spaltenanzahl ermitteln
	myReq.numCol = (unsigned long int) mysql_num_fields(myReq.result);
	//Größe der Felder, für die Ausgabe in den filestream
	int colSize[4] = {5,30,30,10};

	//Datei mit Daten füllen
	file&lt;&lt;header;
	while(myReq.rowContent = mysql_fetch_row(myReq.result))
	{		
		for(unsigned long int i = 0; i&lt;myReq.numCol; ++i)
		{
			file&lt;&lt;std::setw(colSize[i])&lt;&lt;myReq.rowContent[i]&lt;&lt;&quot;|&quot;;
		}
		//Zeilenumbruch
		file&lt;&lt;&quot;\n&quot;;
	}
	//Fuß drucken
	file&lt;&lt;footer;
	file.close();
}
</code></pre>
<p>Ich möchte mir jetzt ein Objekt PrintDB erstellen und dann mit dem &lt;&lt; Operator die Informationen in datei umleiten. hab mir die klasse mal so aufgebaut:</p>
<pre><code class="language-cpp">class PrintDB
{
private:
	#define	header &quot;-------------------------------------------------------------------------------\n|  ID|                      Nachname|                       Vorname|       Geb|\n-------------------------------------------------------------------------------\n&quot;
	#define footer &quot;*********************************Ende der Liste********************************&quot;;

public:
	char filename[50];
	std::string getHeader(){ return header;}
	std::string getFooter(){ return header;}
	friend std::ostream&amp; operator&lt;&lt;(std::ostream &amp;stream, PrintDB &amp;);
	PrintDB();
	~PrintDB();
};
</code></pre>
<p>.cpp</p>
<pre><code class="language-cpp">PrintDB::PrintDB()
{
	std::cout&lt;&lt;&quot;Geben Sie bitte einen Dateiname ein: &quot;;
	std::cin&gt;&gt;filename;
	std::cin.ignore(1,'\n');

}

std::ostream&amp;::operator &lt;&lt;(std::ostream &amp; stream, PrintDB &amp;oPrintDB)
{
	return stream &lt;&lt; oPrintDB.getHeader();
}

PrintDB::~PrintDB()
{

	std::cout&lt;&lt;&quot;Aufruf des PrintDB DEstruktor&quot;&lt;&lt;std::endl;

}
</code></pre>
<p>Aber das ist nichts, der compiler wirft tonnenweiese fehlermeldungen aus:</p>
<blockquote>
<p>\printdb.cpp(17) : error C2679: binary '&lt;&lt;' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion)<br />
c:\program files\microsoft visual studio 8\vc\include\ostream(650): could be 'std::basic_ostream&lt;_Elem,_Traits&gt; &amp;std::operator &lt;&lt;&lt;char,std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;_Elem,_Traits&gt; &amp;,const char *)' [found using argument-dependent lookup]<br />
with<br />
[<br />
_Elem=char,<br />
_Traits=std::char_traits&lt;char&gt;<br />
]<br />
c:\program files\microsoft visual studio 8\vc\include\ostream(697): or 'std::basic_ostream&lt;_Elem,_Traits&gt; &amp;std::operator &lt;&lt;&lt;char,std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;_Elem,_Traits&gt; &amp;,char)' [found using argument-dependent lookup]<br />
with<br />
[<br />
_Elem=char,<br />
_Traits=std::char_traits&lt;char&gt;<br />
]<br />
c:\program files\microsoft visual studio 8\vc\include\ostream(735): or 'std::basic_ostream&lt;_Elem,_Traits&gt; &amp;std::operator &lt;&lt;&lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;_Elem,_Traits&gt; &amp;,const char *)' [found using argument-dependent lookup]<br />
with<br />
[<br />
_Elem=char,<br />
_Traits=std::char_traits&lt;char&gt;<br />
]<br />
c:\program files\microsoft visual studio 8\vc\include\ostream(782): or 'std::basic_ostream&lt;_Elem,_Traits&gt; &amp;std::operator &lt;&lt;&lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;_Elem,_Traits&gt; &amp;,char)' [found using argument-dependent lookup]<br />
with<br />
[<br />
_Elem=char,<br />
_Traits=std::char_traits&lt;char&gt;<br />
]<br />
c:\program files\microsoft visual studio 8\vc\include\ostream(906): or 'std::basic_ostream&lt;_Elem,_Traits&gt; &amp;std::operator &lt;&lt;&lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;_Elem,_Traits&gt; &amp;,const signed char *)' [found using argument-dependent lookup]<br />
with<br />
[<br />
_Elem=char,<br />
_Traits=std::char_traits&lt;char&gt;<br />
]<br />
c:\program files\microsoft visual studio 8\vc\include\ostream(913): or 'std::basic_ostream&lt;_Elem,_Traits&gt; &amp;std::operator &lt;&lt;&lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;_Elem,_Traits&gt; &amp;,signed char)' [found using argument-dependent lookup]<br />
with<br />
[<br />
_Elem=char,<br />
_Traits=std::char_traits&lt;char&gt;<br />
]</p>
</blockquote>
<p>Denke ich hab da ein Verständnisproblem, wie müsste sowas aussehen, damit ich alle daten die gedruckt werden sollen einfach mit &lt;&lt; an das PrintDB Objekt übergeben werden können?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/144443/operator-lt-lt-überladen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 15:33:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144443.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 18 Apr 2006 11:16:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator&amp;lt;&amp;lt; überladen on Tue, 18 Apr 2006 11:16:57 GMT]]></title><description><![CDATA[<p>Ich möchte mir für die Ausgabe meiner MySQL Abfragen ein Objekt erstellen das mir das ganze in eine Datei ausgibt. dazu will den Operator &lt;&lt; überladen. Derzeit mach ich das ganze etwas unschön alles zusammen in einer Methode(ohen Objekt - im grunde will ich die druckausgabe jetzt objektbasiert erledigen):</p>
<pre><code class="language-cpp">void outputDB()
{
	//Elemente für die Liste
	#define	header &quot;-------------------------------------------------------------------------------\n|  ID|                      Nachname|                       Vorname|       Geb|\n-------------------------------------------------------------------------------\n&quot;
	#define footer &quot;*********************************Ende der Liste********************************&quot;;

	std::ofstream file(&quot;Mitarbeiter.dat&quot;);

	//Objekte für Datenbankabfrage erzeugen
	ConnectDB* myConnection = createConnection();
	SendRequestDB myReq;
	myReq.result = myReq.selectAll(myConnection-&gt;pConnection);
	destroyConnection(myConnection);

	//Spaltenanzahl ermitteln
	myReq.numCol = (unsigned long int) mysql_num_fields(myReq.result);
	//Größe der Felder, für die Ausgabe in den filestream
	int colSize[4] = {5,30,30,10};

	//Datei mit Daten füllen
	file&lt;&lt;header;
	while(myReq.rowContent = mysql_fetch_row(myReq.result))
	{		
		for(unsigned long int i = 0; i&lt;myReq.numCol; ++i)
		{
			file&lt;&lt;std::setw(colSize[i])&lt;&lt;myReq.rowContent[i]&lt;&lt;&quot;|&quot;;
		}
		//Zeilenumbruch
		file&lt;&lt;&quot;\n&quot;;
	}
	//Fuß drucken
	file&lt;&lt;footer;
	file.close();
}
</code></pre>
<p>Ich möchte mir jetzt ein Objekt PrintDB erstellen und dann mit dem &lt;&lt; Operator die Informationen in datei umleiten. hab mir die klasse mal so aufgebaut:</p>
<pre><code class="language-cpp">class PrintDB
{
private:
	#define	header &quot;-------------------------------------------------------------------------------\n|  ID|                      Nachname|                       Vorname|       Geb|\n-------------------------------------------------------------------------------\n&quot;
	#define footer &quot;*********************************Ende der Liste********************************&quot;;

public:
	char filename[50];
	std::string getHeader(){ return header;}
	std::string getFooter(){ return header;}
	friend std::ostream&amp; operator&lt;&lt;(std::ostream &amp;stream, PrintDB &amp;);
	PrintDB();
	~PrintDB();
};
</code></pre>
<p>.cpp</p>
<pre><code class="language-cpp">PrintDB::PrintDB()
{
	std::cout&lt;&lt;&quot;Geben Sie bitte einen Dateiname ein: &quot;;
	std::cin&gt;&gt;filename;
	std::cin.ignore(1,'\n');

}

std::ostream&amp;::operator &lt;&lt;(std::ostream &amp; stream, PrintDB &amp;oPrintDB)
{
	return stream &lt;&lt; oPrintDB.getHeader();
}

PrintDB::~PrintDB()
{

	std::cout&lt;&lt;&quot;Aufruf des PrintDB DEstruktor&quot;&lt;&lt;std::endl;

}
</code></pre>
<p>Aber das ist nichts, der compiler wirft tonnenweiese fehlermeldungen aus:</p>
<blockquote>
<p>\printdb.cpp(17) : error C2679: binary '&lt;&lt;' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion)<br />
c:\program files\microsoft visual studio 8\vc\include\ostream(650): could be 'std::basic_ostream&lt;_Elem,_Traits&gt; &amp;std::operator &lt;&lt;&lt;char,std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;_Elem,_Traits&gt; &amp;,const char *)' [found using argument-dependent lookup]<br />
with<br />
[<br />
_Elem=char,<br />
_Traits=std::char_traits&lt;char&gt;<br />
]<br />
c:\program files\microsoft visual studio 8\vc\include\ostream(697): or 'std::basic_ostream&lt;_Elem,_Traits&gt; &amp;std::operator &lt;&lt;&lt;char,std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;_Elem,_Traits&gt; &amp;,char)' [found using argument-dependent lookup]<br />
with<br />
[<br />
_Elem=char,<br />
_Traits=std::char_traits&lt;char&gt;<br />
]<br />
c:\program files\microsoft visual studio 8\vc\include\ostream(735): or 'std::basic_ostream&lt;_Elem,_Traits&gt; &amp;std::operator &lt;&lt;&lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;_Elem,_Traits&gt; &amp;,const char *)' [found using argument-dependent lookup]<br />
with<br />
[<br />
_Elem=char,<br />
_Traits=std::char_traits&lt;char&gt;<br />
]<br />
c:\program files\microsoft visual studio 8\vc\include\ostream(782): or 'std::basic_ostream&lt;_Elem,_Traits&gt; &amp;std::operator &lt;&lt;&lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;_Elem,_Traits&gt; &amp;,char)' [found using argument-dependent lookup]<br />
with<br />
[<br />
_Elem=char,<br />
_Traits=std::char_traits&lt;char&gt;<br />
]<br />
c:\program files\microsoft visual studio 8\vc\include\ostream(906): or 'std::basic_ostream&lt;_Elem,_Traits&gt; &amp;std::operator &lt;&lt;&lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;_Elem,_Traits&gt; &amp;,const signed char *)' [found using argument-dependent lookup]<br />
with<br />
[<br />
_Elem=char,<br />
_Traits=std::char_traits&lt;char&gt;<br />
]<br />
c:\program files\microsoft visual studio 8\vc\include\ostream(913): or 'std::basic_ostream&lt;_Elem,_Traits&gt; &amp;std::operator &lt;&lt;&lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;_Elem,_Traits&gt; &amp;,signed char)' [found using argument-dependent lookup]<br />
with<br />
[<br />
_Elem=char,<br />
_Traits=std::char_traits&lt;char&gt;<br />
]</p>
</blockquote>
<p>Denke ich hab da ein Verständnisproblem, wie müsste sowas aussehen, damit ich alle daten die gedruckt werden sollen einfach mit &lt;&lt; an das PrintDB Objekt übergeben werden können?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1039698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1039698</guid><dc:creator><![CDATA[Karsten34]]></dc:creator><pubDate>Tue, 18 Apr 2006 11:16:57 GMT</pubDate></item><item><title><![CDATA[Reply to operator&amp;lt;&amp;lt; überladen on Tue, 18 Apr 2006 11:21:46 GMT]]></title><description><![CDATA[<p>Hast du möglicherweise eine Header vergessen einzubinden? (weil, nach meinem Wissen sollte es einen op&lt;&lt;(ostream&amp;, string) geben)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1039701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1039701</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 18 Apr 2006 11:21:46 GMT</pubDate></item><item><title><![CDATA[Reply to operator&amp;lt;&amp;lt; überladen on Tue, 18 Apr 2006 11:31:10 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">std::ostream&amp;::operator &lt;&lt;(std::ostream &amp; stream, PrintDB &amp;oPrintDB)
{
    return stream &lt;&lt; oPrintDB.getHeader();
}
</code></pre>
</blockquote>
<p>Mir kommt diese Konstruktion etwas sehr suspekt vor, besonders der Scope-op...</p>
<p>Besser:</p>
<pre><code class="language-cpp">std::ostream&amp; operator &lt;&lt;(std::ostream &amp; stream, const PrintDB &amp;oPrintDB)
{
    return stream &lt;&lt; oPrintDB.getHeader();
}
</code></pre>
<p>Im Übrigen kannst du die friend Deklaration auch wieder rausnehmen, schließlich überlädst du den op ja global und verwendest keine privaten Daten der Klasse.</p>
<p>MfG</p>
<p>GPC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1039706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1039706</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Tue, 18 Apr 2006 11:31:10 GMT</pubDate></item></channel></rss>