<?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[Templates &#x2F; Funktionszeiger]]></title><description><![CDATA[<p>Ich kämpfe mich gerade mühsam durch Templates und Funktionszeiger und bin dabei in einer Sackgasse gelandet.</p>
<p>Die Funktion Serialize ist implementiert und getestet. Ebenfalls vorhanden und getestet ist die Klasse &quot;Wein&quot;. Wie kann ich nun den Funktionszeiger &quot;serialize&quot; korrekt dem Template-Funktionszeiger &quot;funptr&quot; zuweisen?</p>
<p>************************************************<br />
main()<br />
***********************************************</p>
<p>template&lt;class T&gt; void(*funptr)(T&amp; t, vector&lt;unsigned short&gt;&amp; v);<br />
void serialize(Wein&amp; w, vector&lt;unsigned short&gt;&amp; v);</p>
<p>int main()<br />
{<br />
funptr = serialize;</p>
<p>return 0;<br />
}</p>
<p>************************************************<br />
ERORR:<br />
***********************************************</p>
<p>--------------------Konfiguration: Hashing - Win32 Debug--------------------<br />
Kompilierung läuft...<br />
main.cpp<br />
D:\Hashing\main.cpp('38') : error C2440: '=' : 'void (__cdecl *)(class Wein &amp;,class std::vector&lt;unsigned short,class std::allocator&lt;unsigned short&gt; &gt; &amp;)' kann nicht in 'void (__cdecl *)(<br />
&amp;,class std::vector&lt;unsigned short,class std::allocator&lt;unsigned short&gt; &gt; &amp;)' konvertiert werden<br />
Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat<br />
Fehler beim Ausführen von cl.exe.</p>
<p>Hashing.exe - 1 Fehler, 0 Warnung(en)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/118315/templates-funktionszeiger</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 09:20:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/118315.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 Aug 2005 10:03:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates &#x2F; Funktionszeiger on Wed, 17 Aug 2005 10:03:21 GMT]]></title><description><![CDATA[<p>Ich kämpfe mich gerade mühsam durch Templates und Funktionszeiger und bin dabei in einer Sackgasse gelandet.</p>
<p>Die Funktion Serialize ist implementiert und getestet. Ebenfalls vorhanden und getestet ist die Klasse &quot;Wein&quot;. Wie kann ich nun den Funktionszeiger &quot;serialize&quot; korrekt dem Template-Funktionszeiger &quot;funptr&quot; zuweisen?</p>
<p>************************************************<br />
main()<br />
***********************************************</p>
<p>template&lt;class T&gt; void(*funptr)(T&amp; t, vector&lt;unsigned short&gt;&amp; v);<br />
void serialize(Wein&amp; w, vector&lt;unsigned short&gt;&amp; v);</p>
<p>int main()<br />
{<br />
funptr = serialize;</p>
<p>return 0;<br />
}</p>
<p>************************************************<br />
ERORR:<br />
***********************************************</p>
<p>--------------------Konfiguration: Hashing - Win32 Debug--------------------<br />
Kompilierung läuft...<br />
main.cpp<br />
D:\Hashing\main.cpp('38') : error C2440: '=' : 'void (__cdecl *)(class Wein &amp;,class std::vector&lt;unsigned short,class std::allocator&lt;unsigned short&gt; &gt; &amp;)' kann nicht in 'void (__cdecl *)(<br />
&amp;,class std::vector&lt;unsigned short,class std::allocator&lt;unsigned short&gt; &gt; &amp;)' konvertiert werden<br />
Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat<br />
Fehler beim Ausführen von cl.exe.</p>
<p>Hashing.exe - 1 Fehler, 0 Warnung(en)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854037</guid><dc:creator><![CDATA[Bost]]></dc:creator><pubDate>Wed, 17 Aug 2005 10:03:21 GMT</pubDate></item><item><title><![CDATA[Reply to Templates &#x2F; Funktionszeiger on Wed, 17 Aug 2005 10:43:21 GMT]]></title><description><![CDATA[<p>Willst du den ersten Parametertyp des Funktionspointers variabel halten?<br />
Dann könntest sowas machen:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

struct Wein {};

template &lt;typename T&gt;
struct function_holder {
  typedef void (*p)(T&amp;, std::vector&lt;unsigned short&gt;&amp;);
};

void serialize(Wein&amp; wein, std::vector&lt;unsigned short&gt;&amp; v) {}

int main() {
    function_holder&lt;Wein&gt;::p fp = &amp;serialize;
    std::vector&lt;unsigned short&gt; v;
    Wein w;

    fp(w, v);
    return 0;
}
</code></pre>
<p>Edit: böse Smilies ..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854073</guid><dc:creator><![CDATA[zeronull]]></dc:creator><pubDate>Wed, 17 Aug 2005 10:43:21 GMT</pubDate></item><item><title><![CDATA[Reply to Templates &#x2F; Funktionszeiger on Wed, 17 Aug 2005 11:59:40 GMT]]></title><description><![CDATA[<p>Hallo Zeronull, danke für deine Antwort. Leider komme ich nur bedingt weiter, d.h. ich kann deinen Code nachvollziehen - denke ich zumindest - aber kann nicht wie erhofft das eigentliche Problem lösen...</p>
<p>Die Funktionalitäten bleiben eigentlich erhalten, aber der variable Funktionszeiger befindet sich nun in der Parameterliste des Konstruktors der Template-Klasse &quot;Hash&quot;... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>*huidawirdeinemanders*</p>
<p>HASHKLASSE:</p>
<pre><code class="language-cpp">#include &quot;wein.h&quot;
#include &lt;iostream&gt;
#include &lt;vector&gt;

#ifndef HASH_H
#define HASH_H

using namespace std;

template&lt;class T&gt; class Hash{
public:
	Hash(int tableSize, int Module, void(*fun_ptr)(T&amp; t, vector&lt;unsigned short&gt;&amp; v));
private:
	Hash(){}      // Std. Konstruktor wird kaschiert...
};
#endif //HASH_H
</code></pre>
<p>MAIN:</p>
<pre><code class="language-cpp">#include &quot;hash.h&quot;
#include &quot;wein.h&quot;
#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

void serialize(Wein&amp; w, vector&lt;unsigned short&gt;&amp; v) {}

int main()
{
	Wein fusel;

	// da bockt der Linker
	Hash&lt;Wein&gt; myHashTable(1,1,serialize);

	return 0;
}
</code></pre>
<p>FEHLERMELDUNG:</p>
<pre><code class="language-cpp">--------------------Konfiguration: Hashing - Win32 Debug--------------------
Kompilierung läuft...
main.cpp
Linker-Vorgang läuft...
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol &quot;public: __thiscall Hash&lt;class Wein&gt;::Hash&lt;class Wein&gt;(int,int,void (__cdecl*)(class Wein &amp;,class std::vector&lt;unsigned short,class std::allocator&lt;unsigned short&gt; &gt; &amp;))&quot; (??0?$Hash@VWein@@@@
QAE@HHP6AXAAVWein@@AAV?$vector@GV?$allocator@G@std@@@std@@@Z@Z)
Debug/Hashing.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

Hashing.exe - 2 Fehler, 0 Warnung(en)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/854142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854142</guid><dc:creator><![CDATA[Bost]]></dc:creator><pubDate>Wed, 17 Aug 2005 11:59:40 GMT</pubDate></item><item><title><![CDATA[Reply to Templates &#x2F; Funktionszeiger on Wed, 17 Aug 2005 12:56:11 GMT]]></title><description><![CDATA[<p>Na dann fehlt noch eine kleine Modifikation der Klasse Hash(+ eine korrekte Instanzierung in der main()), und die Sache hat sich:</p>
<pre><code class="language-cpp">template &lt;class T&gt; 
class Hash {
public:
       typedef void (*func_ptr)(T&amp; t, vector&lt;unsigned short&gt;&amp; v);
       Hash(int tableSize, int Module, func_ptr fp) {}
private:
        Hash() {}      // Std. Konstruktor wird kaschiert...
};

// ..

int main()
{
    Wein fusel;
    Hash&lt;Wein&gt; myHashTable(1, 1, &amp;serialize);  // der Konstruktor bekommt die Adresse(!) von serialize

    return 0;
}
</code></pre>
<p>Alternativ kannst du die Funktionspointerdeklaration natürlich auch hardcoded im Konstruktor lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854192</guid><dc:creator><![CDATA[zeronull]]></dc:creator><pubDate>Wed, 17 Aug 2005 12:56:11 GMT</pubDate></item><item><title><![CDATA[Reply to Templates &#x2F; Funktionszeiger on Wed, 17 Aug 2005 13:38:54 GMT]]></title><description><![CDATA[<p>...*heul*...</p>
<p>genau die habe ich versucht doch bleibe ich wieder an einem Linker-Fehler hängen. Ich habe alle meine #includes nochmals durchgesehen und denke, dass ich alle habe, was kanns denn noch sein?!?!</p>
<p>Ich habe meine Files einmal als ZIP-File auf meine Seite gepostet, wäre sehr froh, wenn jemand Zeit hat es kurz anzuschauen...<br />
<a href="http://www.b-stoll.ch/cpp/hashing.zip" rel="nofollow">www.b-stoll.ch/cpp/hashing.zip</a></p>
<p>Dank und Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854234</guid><dc:creator><![CDATA[Bost]]></dc:creator><pubDate>Wed, 17 Aug 2005 13:38:54 GMT</pubDate></item><item><title><![CDATA[Reply to Templates &#x2F; Funktionszeiger on Wed, 17 Aug 2005 13:50:56 GMT]]></title><description><![CDATA[<p>Ich denke der inhalt von hash.cpp muss noch in die hash.h.<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854242</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Wed, 17 Aug 2005 13:50:56 GMT</pubDate></item><item><title><![CDATA[Reply to Templates &#x2F; Funktionszeiger on Wed, 17 Aug 2005 13:51:40 GMT]]></title><description><![CDATA[<p>templates werden im header definiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /><br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39467.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39467.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/854244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854244</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Wed, 17 Aug 2005 13:51:40 GMT</pubDate></item><item><title><![CDATA[Reply to Templates &#x2F; Funktionszeiger on Wed, 17 Aug 2005 14:06:55 GMT]]></title><description><![CDATA[<p>...unglaublich...</p>
<p>da verbrat ich Schmalz ohne Ende und dann sowas <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>tausend Dank<br />
Bo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854260</guid><dc:creator><![CDATA[Bost]]></dc:creator><pubDate>Wed, 17 Aug 2005 14:06:55 GMT</pubDate></item></channel></rss>