<?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[Funktion eines Templates benutzen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem - und zwar versuche ich eine Template-Klasse zu schreiben, in der Funktionen des Templates benutzt werden.</p>
<p>Als Beispiel habe ich:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Map
{
   Map(T t) : t(t) {};
   do_something() {  cout &lt;&lt; t.get_hash(); };
   T t;
}
</code></pre>
<p>Wie mache ich das? Kann mir jemand ein Beispiel geben?<br />
Ich muss irgendeine Struktur übergeben, aber ich weiß nicht wie.<br />
google hilft mir leider auch nicht weiter.</p>
<p>Danke im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289668/funktion-eines-templates-benutzen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 21:46:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289668.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 10 Jul 2011 15:10:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion eines Templates benutzen on Sun, 10 Jul 2011 15:10:37 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem - und zwar versuche ich eine Template-Klasse zu schreiben, in der Funktionen des Templates benutzt werden.</p>
<p>Als Beispiel habe ich:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Map
{
   Map(T t) : t(t) {};
   do_something() {  cout &lt;&lt; t.get_hash(); };
   T t;
}
</code></pre>
<p>Wie mache ich das? Kann mir jemand ein Beispiel geben?<br />
Ich muss irgendeine Struktur übergeben, aber ich weiß nicht wie.<br />
google hilft mir leider auch nicht weiter.</p>
<p>Danke im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2091013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091013</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Sun, 10 Jul 2011 15:10:37 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion eines Templates benutzen on Sun, 10 Jul 2011 15:18:42 GMT]]></title><description><![CDATA[<p>Sieht doch ganz ok aus. Du musst dein Klassentemplate nur noch mit irgendwas instanziieren und die Memberfunktionen, an die du von aussen willst, public machen.<br />
So zb:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

class Policy
{
public:
 std::string get_hash() { return &quot;bla&quot;; }
};

template&lt;class T&gt;
class Map
{
public:
 Map(T t) : t(t) {}
 void do_something() { std::cout &lt;&lt; t.get_hash(); }
private:
 T t;
};

int main()
{
 Policy p;
 Map&lt;Policy&gt; m( p );
 m.do_something();
 return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2091016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091016</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Sun, 10 Jul 2011 15:18:42 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion eines Templates benutzen on Mon, 11 Jul 2011 01:05:03 GMT]]></title><description><![CDATA[<p>Dank dir für die Hilfe!<br />
Das hat letzten Endes doch noch geklappt. <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>
<p>Aber nun habe ich ein weiteres Problem! Ich bekomme dauernd die Fehlermeldung</p>
<blockquote>
<p>1&gt;Main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;public: __thiscall Hashmap&lt;int,int&gt;::~Hashmap&lt;int,int&gt;(void)&quot; (??1?$Hashmap@HH@@QAE@XZ)&quot; in Funktion &quot;&quot;void __cdecl hashmap_test(void)&quot; (?hashmap_test@@YAXXZ)&quot;.</p>
</blockquote>
<p>und ich habe keine Ahnung warum!</p>
<p>Ich habe eine Hashmap programmiert und um sie generisch zu machen, soll sie die Hashfunktion zum jeweiligen Typ übergeben bekommen. Aber das klappt nicht!! Und ich habe keine Ahnung wieso...</p>
<p>Das hier ist die Hashmap</p>
<pre><code class="language-cpp">template&lt;class T_1, class T_2&gt;
class Hashmap
{
public:
	Hashmap(const size_t&amp; s, int (*get_hash)(const T_1&amp;) ) : get_hash(get_hash) { init(s); };
	~Hashmap();

private:
	int (*get_hash) (const T_1&amp;);
</code></pre>
<p>In Hashmap.cpp wird Hashfunctions.h inkludiert, wo alle Hashfunktionen sein sollen.</p>
<p>Kann mir jemand helfen und sagen was ich falsch mache?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2091202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091202</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Mon, 11 Jul 2011 01:05:03 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion eines Templates benutzen on Mon, 11 Jul 2011 05:26:11 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Der Linker findet einfach nicht die Definition des Destruktors deiner Klasse. Die muss auch mit in den Header.<br />
siehe auch<br />
<a href="http://www.c-plusplus.net/forum/39467" rel="nofollow">http://www.c-plusplus.net/forum/39467</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2091211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091211</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 11 Jul 2011 05:26:11 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion eines Templates benutzen on Tue, 12 Jul 2011 19:24:33 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>Der Linker findet einfach nicht die Definition des Destruktors deiner Klasse. Die muss auch mit in den Header.<br />
siehe auch<br />
<a href="http://www.c-plusplus.net/forum/39467" rel="nofollow">http://www.c-plusplus.net/forum/39467</a></p>
</blockquote>
<p>Dank Dir!<br />
Das ist ja echt blöd.</p>
<p>Ich habe nun ein weiteres Problem mit den Teplates! Und zwar habe ich eine Klasse Pair mit 2 template Klassen und die Operator== Funktion will nicht funktionieren.</p>
<pre><code class="language-cpp">template&lt;class T_1, class T_2&gt;
class Pair
{
public:
	Pair(const T_1&amp; first, const T_2&amp; second) : first(first), second(second) {};
	friend bool operator== (const Pair&lt;T_1,T_2&gt;&amp;, const Pair&lt;T_1,T_2&gt;&amp;);
private:
	T_1 first;
	T_2 second;
};
</code></pre>
<p>Etwas weiter unten im Header ist die Operator== Methode definiert.</p>
<p>Trotzdem bekomme ich immer die Fehlermeldung</p>
<blockquote>
<p>error LNK2001: Nicht aufgelöstes externes Symbol &quot;&quot;bool __cdecl operator==(class Pair&lt;class Coordinate,class Coordinate&gt; const &amp;,class Pair&lt;class Coordinate,class Coordinate&gt; const &amp;)</p>
</blockquote>
<p>Was mache ich denn nun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2091993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2091993</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Tue, 12 Jul 2011 19:24:33 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion eines Templates benutzen on Tue, 12 Jul 2011 20:25:10 GMT]]></title><description><![CDATA[<blockquote>
<p>Etwas weiter unten im Header ist die Operator== Methode definiert.</p>
</blockquote>
<p>Bloss nicht herzeigen.</p>
<p>Wobei... ich weiss gar nicht ob das geht. Also extern (ausserhalb der Klasse) definiert.<br />
Definier den friend einfach in der Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092026</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 12 Jul 2011 20:25:10 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion eines Templates benutzen on Tue, 12 Jul 2011 20:38:54 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<blockquote>
<p>Etwas weiter unten im Header ist die Operator== Methode definiert.</p>
</blockquote>
<p>Bloss nicht herzeigen.</p>
<p>Wobei... ich weiss gar nicht ob das geht. Also extern (ausserhalb der Klasse) definiert.<br />
Definier den friend einfach in der Klasse.</p>
</blockquote>
<p>Sorry.</p>
<p>Das hier steht nun in der Klasse</p>
<pre><code class="language-cpp">bool operator== (const Pair&lt;T_1,T_2&gt;&amp; p_2)
	{
	if (get_first() == p_2.get_first())
		if (get_second() == p_2.get_second())
			return true;
	if (get_second() == p_2.get_first())
		if (get_first() == p_2.get_second())
			return true;
	return false;
	};
</code></pre>
<p>Und gibt Fehler C2678.</p>
<p>Habe aber gerade die Signatur in</p>
<pre><code class="language-cpp">bool operator== (const Pair&lt;T_1,T_2&gt;&amp; p_2) const
</code></pre>
<p>geändert und es compiliert.<br />
(Wusste gar nicht, dass Operator-Methoden const sein müssen!!!)</p>
<p>Hoffentlich funktioniert das auch.</p>
<p>Also ich muss schon sagen. Ich habe noch nie eine Programmiersprache kennen gelernt, die so verworren ist... Das ärgert mich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092038</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Tue, 12 Jul 2011 20:38:54 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion eines Templates benutzen on Tue, 12 Jul 2011 20:45:34 GMT]]></title><description><![CDATA[<p>Ein Operator muß im Allgemeinen nicht konstant sein. Und wenn du den Vergleich sowieso über das öffentliche Interface definierst, braucht er noch nicht einmal ein Member der Klasse sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092043</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 12 Jul 2011 20:45:34 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion eines Templates benutzen on Tue, 12 Jul 2011 20:56:51 GMT]]></title><description><![CDATA[<p>ichbineinnoob schrieb:</p>
<blockquote>
<p>Habe aber gerade die Signatur in</p>
<pre><code class="language-cpp">bool operator== (const Pair&lt;T_1,T_2&gt;&amp; p_2) const
</code></pre>
<p>geändert und es compiliert.<br />
(Wusste gar nicht, dass Operator-Methoden const sein müssen!!!)</p>
</blockquote>
<p>Vielleicht sind <strong>static</strong> oder <strong>friend</strong> angemessener als <strong>const</strong>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092048</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 12 Jul 2011 20:56:51 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion eines Templates benutzen on Tue, 12 Jul 2011 21:03:58 GMT]]></title><description><![CDATA[<p>Mit friend <strong>definieren</strong> und nicht nur deklarieren.</p>
<pre><code class="language-cpp">template&lt;class T_1, class T_2&gt;
class Pair
{
public:
    Pair(const T_1&amp; first, const T_2&amp; second) : first(first), second(second) {};
    friend bool operator== (const Pair&lt;T_1,T_2&gt;&amp; a, const Pair&lt;T_1,T_2&gt;&amp; b)
    {
       return a.first==b.first &amp;&amp; a.second==b.second;
    }
private:
    T_1 first;
    T_2 second;
};
</code></pre>
<p>Lustigerweise definiert man so eine Funktion, die außerhalb der Klasse lebt. Schon ein wenig plemplem.</p>
<p>Aber klappt, und macht viel Ärger weg. Lehrbücher können das normalerweise nicht. Für die ist friend nur als Deklaration möglich. Ich bin nichtmal sicher, daß es erlaubt ist, ich weiß nur, daß es es gerne so mache. Vor allem bei Templates.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092054</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 12 Jul 2011 21:03:58 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion eines Templates benutzen on Tue, 12 Jul 2011 21:02:31 GMT]]></title><description><![CDATA[<p>Aber friend funktioniert irgendwie nicht! Siehe oben.</p>
<p>Erst als ich die Methode in die Klasse geschoben habe, hat es kompiliert.</p>
<p>Und bei static bekomme ich folgende Meldung:</p>
<blockquote>
<p>error C2801: &quot;Pair&lt;T_1,T_2&gt;::operator ==&quot; muss ein nicht statischer Member sein.</p>
</blockquote>
<p>Vielleicht habe ich einfach etwas falsch programmiert? Aber ich kann nun schlecht meinen gesamten Code hier einfügen. Bin saufroh, dass es überhaupt kompiliert. Muss es später mal ausprobieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092055</guid><dc:creator><![CDATA[ichbineinnoob]]></dc:creator><pubDate>Tue, 12 Jul 2011 21:02:31 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion eines Templates benutzen on Tue, 12 Jul 2011 21:19:07 GMT]]></title><description><![CDATA[<p>volkard hat doch eh schon gezeigt wie es geht.<br />
Was verwendest du denn für einen Compiler? Ist der vielleicht ... ziemlich alt und/oder verbuggt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092064</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 12 Jul 2011 21:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion eines Templates benutzen on Tue, 12 Jul 2011 21:22:48 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>volkard hat doch eh schon gezeigt wie es geht.<br />
Was verwendest du denn für einen Compiler? Ist der vielleicht ... ziemlich alt und/oder verbuggt?</p>
</blockquote>
<p>Das war wohl seine Antwort auf 22:56, wo ich es noch nicht gezeigt hatte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092065</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 12 Jul 2011 21:22:48 GMT</pubDate></item></channel></rss>