<?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[Template-Argument kann nicht hergeleitet werden]]></title><description><![CDATA[<p>Guten Tag,<br />
Hab das Problem das der Compiler das Template-Argument nicht herleiten kann, ich aber nicht weiss warum, bzw. ich den Wald vor lauter Bäumen nicht seh :p<br />
Hier mal das der Quellcode in abgespäckter Version</p>
<pre><code class="language-cpp">//
//	Logging Header
//

#ifndef __LOGGING__
#define __LOGGING__

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

class Logging
{
	private:
		std::string m_pfad;
	public:
		template&lt;typename T&gt; Logging&amp; operator &lt;&lt;(const T &amp;Event);
		Logging();
		~Logging();
};
#endif

//
//	Logging.cpp
//

#include &quot;logging.h&quot;

Logging::Logging()
{
	this-&gt;m_pfad = &quot;LOG.txt&quot;;
	std::fstream File;
	File.open(this-&gt;m_pfad.c_str(), std::ios::out);
    if(File.is_open())
    {
		File &lt;&lt; &quot;Beginn:\n&quot; &lt;&lt;std::endl;
		File.close();
    }
}

Logging::~Logging()
{
}

template &lt;typename T&gt; Logging&amp; Logging::operator &lt;&lt;(const T &amp;cEvent)
{
    std::fstream File;
    /* Anhängen der Log einträge */
	File.open(this-&gt;m_pfad.c_str(), std::ios::out | std::ios::app);
    if(File.is_open())
    {
		File &lt;&lt; &quot;Log: &quot; &lt;&lt; cEvent;
		File.close();
    }
    return *this;
}

//
// main.cpp
//

#include &lt;iostream&gt;
#include &quot;logging.h&quot;

int main()
{
	Logging log;
	int i=15;
	log &lt;&lt; &quot;Zahl: &quot; &lt;&lt; i &lt;&lt; std::endl;
	return 0;
}
</code></pre>
<p>Ich erhalte folgende Fehlermeldungen vom Compiler</p>
<pre><code>1&gt;f:\c++ - programme\sonstiges\logging\main.cpp(13) : error C2914: &quot;Logging::operator &lt;&lt;&quot;: template-Argument kann nicht hergeleitet werden, da das Funktionsargument mehrdeutig ist.
1&gt;f:\c++ - programme\sonstiges\logging\main.cpp(13) : error C2676: Binärer Operator '&lt;&lt;': 'Logging' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
</code></pre>
<p>Und er nehbt mir folgende Zeile hervor.</p>
<pre><code class="language-cpp">log &lt;&lt; &quot;Zahl: &quot; &lt;&lt; i &lt;&lt; std::endl;
</code></pre>
<p>Nun weiss ich aber nicht was dadrann flasch ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/182367/template-argument-kann-nicht-hergeleitet-werden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 00:09:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/182367.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 24 May 2007 10:50:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template-Argument kann nicht hergeleitet werden on Thu, 24 May 2007 10:50:25 GMT]]></title><description><![CDATA[<p>Guten Tag,<br />
Hab das Problem das der Compiler das Template-Argument nicht herleiten kann, ich aber nicht weiss warum, bzw. ich den Wald vor lauter Bäumen nicht seh :p<br />
Hier mal das der Quellcode in abgespäckter Version</p>
<pre><code class="language-cpp">//
//	Logging Header
//

#ifndef __LOGGING__
#define __LOGGING__

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

class Logging
{
	private:
		std::string m_pfad;
	public:
		template&lt;typename T&gt; Logging&amp; operator &lt;&lt;(const T &amp;Event);
		Logging();
		~Logging();
};
#endif

//
//	Logging.cpp
//

#include &quot;logging.h&quot;

Logging::Logging()
{
	this-&gt;m_pfad = &quot;LOG.txt&quot;;
	std::fstream File;
	File.open(this-&gt;m_pfad.c_str(), std::ios::out);
    if(File.is_open())
    {
		File &lt;&lt; &quot;Beginn:\n&quot; &lt;&lt;std::endl;
		File.close();
    }
}

Logging::~Logging()
{
}

template &lt;typename T&gt; Logging&amp; Logging::operator &lt;&lt;(const T &amp;cEvent)
{
    std::fstream File;
    /* Anhängen der Log einträge */
	File.open(this-&gt;m_pfad.c_str(), std::ios::out | std::ios::app);
    if(File.is_open())
    {
		File &lt;&lt; &quot;Log: &quot; &lt;&lt; cEvent;
		File.close();
    }
    return *this;
}

//
// main.cpp
//

#include &lt;iostream&gt;
#include &quot;logging.h&quot;

int main()
{
	Logging log;
	int i=15;
	log &lt;&lt; &quot;Zahl: &quot; &lt;&lt; i &lt;&lt; std::endl;
	return 0;
}
</code></pre>
<p>Ich erhalte folgende Fehlermeldungen vom Compiler</p>
<pre><code>1&gt;f:\c++ - programme\sonstiges\logging\main.cpp(13) : error C2914: &quot;Logging::operator &lt;&lt;&quot;: template-Argument kann nicht hergeleitet werden, da das Funktionsargument mehrdeutig ist.
1&gt;f:\c++ - programme\sonstiges\logging\main.cpp(13) : error C2676: Binärer Operator '&lt;&lt;': 'Logging' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
</code></pre>
<p>Und er nehbt mir folgende Zeile hervor.</p>
<pre><code class="language-cpp">log &lt;&lt; &quot;Zahl: &quot; &lt;&lt; i &lt;&lt; std::endl;
</code></pre>
<p>Nun weiss ich aber nicht was dadrann flasch ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1291322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1291322</guid><dc:creator><![CDATA[Deathwatcher]]></dc:creator><pubDate>Thu, 24 May 2007 10:50:25 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Argument kann nicht hergeleitet werden on Thu, 24 May 2007 10:56:23 GMT]]></title><description><![CDATA[<p>vielleicht solltest du zunächst mal herausfiltern, welcher der drei Operator-Aufrufe überhaupt als mehrdeutig eingestuft wird <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="😉"
    /> (ich würde ja darauf tippen, daß endl überladen ist).</p>
<p>PS: Dir ist klar, daß jeder Operator-Aufruf sein eigenes &quot;Log:&quot; schreiben wird? (d.h. du bekommst die Zeile &quot;Log: Zahl: Log: 15 Log: &quot; als Ausgabe)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1291325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1291325</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 24 May 2007 10:56:23 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Argument kann nicht hergeleitet werden on Thu, 24 May 2007 11:56:19 GMT]]></title><description><![CDATA[<p>Das std::endl ist das Problem.</p>
<p>Das ist ein Funktionszeiger; siehe BS,C++PL §21.4.6.</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1291365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1291365</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Thu, 24 May 2007 11:56:19 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Argument kann nicht hergeleitet werden on Thu, 24 May 2007 12:18:38 GMT]]></title><description><![CDATA[<p>Danke es lag an std::endl.<br />
Nun hab ich aber das Problem das er es nicht auflösen kann</p>
<pre><code>main.obj : error LNK2001: Nichtaufgeloestes externes Symbol &quot;public: class Logging &amp; __thiscall Logging::operator&lt;&lt;(int const &amp;)&quot; (??6Logging@@QAEAAV0@ABH@Z)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol &quot;public: class Logging &amp; __thiscall Logging::operator&lt;&lt;(char const (&amp;)[7])&quot; (??6Logging@@QAEAAV0@AAY06$$CBD@Z)
</code></pre>
<p>Das Projekt neuerstellen was dabei meistens hilft bring auch kein Erfolg <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a><br />
Danke für den Hinweiss hatte ich ganz übersehen <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/1291375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1291375</guid><dc:creator><![CDATA[Deathwatcher]]></dc:creator><pubDate>Thu, 24 May 2007 12:18:38 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Argument kann nicht hergeleitet werden on Thu, 24 May 2007 12:24:26 GMT]]></title><description><![CDATA[<p>Schieb die Implementierung des operators von der .cpp in die .h Datei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1291376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1291376</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 24 May 2007 12:24:26 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Argument kann nicht hergeleitet werden on Thu, 24 May 2007 12:36:19 GMT]]></title><description><![CDATA[<p>Also irgendwie steh ich mit der Funktion auf Kriegsfuss :p</p>
<p>Hab die Implementierung verschoben, jetzt löst er das auch auf aber es gibt erneut Fehler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<pre><code>1&gt;f:\c++ - programme\sonstiges\logging\main.cpp(13) : error C2893: Funktionsvorlage 'class Logging &amp;__thiscall Logging::operator &lt;&lt;(const T &amp;)' konnte nicht spezialisiert werden
        Mit den folgenden Vorlagenargumenten:
        'char [7]'
1&gt;f:\c++ - programme\sonstiges\logging\main.cpp(13) : error C2676: Binaerer Operator '&lt;&lt;' : 'class Logging' definiert diesen Operator oder eine Konvertierung in einen fuer den vordefinierten Operator geeigneten Typ nicht
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1291388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1291388</guid><dc:creator><![CDATA[Deathwatcher]]></dc:creator><pubDate>Thu, 24 May 2007 12:36:19 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Argument kann nicht hergeleitet werden on Thu, 24 May 2007 13:22:07 GMT]]></title><description><![CDATA[<p>Du hast irgendwo ein Array char[7] an deinen Logging::operator&lt;&lt; uebergeben. Das Template gibt den blauaeugig weiter an std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, char[7]), weil du es so verlangst - leider gibts den aber nicht. du kannst kein ganzes array ueber operator &lt;&lt; beispielsweise an cout uebergeben.</p>
<p>(uebrigens nett, was fuer vokalaufreihungen man mit ner englischen Tastatur bewerkstelligen muss - bl<strong>auaeu</strong>gig)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1291412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1291412</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 24 May 2007 13:22:07 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Argument kann nicht hergeleitet werden on Thu, 24 May 2007 14:24:09 GMT]]></title><description><![CDATA[<p>Ich ruf das so auf</p>
<pre><code class="language-cpp">log &lt;&lt; &quot;Zahl: &quot; &lt;&lt; i &lt;&lt; std::endl;
</code></pre>
<p>und da sieht der die &quot;Zahl: &quot; als char Array an, aber auch wenn ich nur i ausgeben will kommt die Meldung, aber nur mit int.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1291444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1291444</guid><dc:creator><![CDATA[Deathwatcher]]></dc:creator><pubDate>Thu, 24 May 2007 14:24:09 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Argument kann nicht hergeleitet werden on Thu, 24 May 2007 15:04:28 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>(ich würde ja darauf tippen, daß endl überladen ist).</p>
</blockquote>
<p>Was bedeutet Überladen bzgl. endl ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1291475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1291475</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Thu, 24 May 2007 15:04:28 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Argument kann nicht hergeleitet werden on Thu, 24 May 2007 15:11:39 GMT]]></title><description><![CDATA[<p>templäd schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>(ich würde ja darauf tippen, daß endl überladen ist).</p>
</blockquote>
<p>Was bedeutet Überladen bzgl. endl ?</p>
</blockquote>
<p>Das bedeutet, daß es zwei Funktionen namens 'endl' gibt und der Compiler nicht entscheiden kann, welche davon die richtige ist (endl ist normalerweise eine Funktion 'ostream&amp; endl(ostream&amp;);' - und der Stream-Operator ist für dazu passende Funktionspointer überladen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1291485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1291485</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 24 May 2007 15:11:39 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Argument kann nicht hergeleitet werden on Mon, 28 May 2007 10:02:10 GMT]]></title><description><![CDATA[<p>Hab das ganze Wochenende rum getüftel aber kein Lösung gefunden, deshalb meld ich mich noch mal hier.</p>
<p>Also wenn ich den &lt;&lt; operator nur mit int aufrufe also so</p>
<pre><code class="language-cpp">log &lt;&lt; i;
</code></pre>
<p>Kommt folgende Fehlermeldung, an der ich verzweifel.</p>
<pre><code>1&gt;f:\c++ - programme\sonstiges\logging\main.cpp(13) : error C2893: Funktionsvorlage 'class Logging &amp;__thiscall Logging::operator &lt;&lt;(const T &amp;)' konnte nicht spezialisiert werden
        Mit den folgenden Vorlagenargumenten:
        'int'
1&gt;f:\c++ - programme\sonstiges\logging\main.cpp(13) : error C2676: Binaerer Operator '&lt;&lt;' : 'class Logging' definiert diesen Operator oder eine Konvertierung in einen fuer den vordefinierten Operator geeigneten Typ nicht
</code></pre>
<p>Implementier ich den &lt;&lt; operator einmal für std::string und einem für int kann ich ihn so aufrufen</p>
<pre><code class="language-cpp">log &lt;&lt; &quot;Zahl: &quot; &lt;&lt; i;
</code></pre>
<p>Jetzt ist die Frage warum funktioniert das nicht mit der Template Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293560</guid><dc:creator><![CDATA[Deathwatcher]]></dc:creator><pubDate>Mon, 28 May 2007 10:02:10 GMT</pubDate></item></channel></rss>