<?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[Compilerfehler mit Funktionszeigern und Template]]></title><description><![CDATA[<p>Ich hab mit Visual Studio 2008 beim kompilieren folgenden codes eine interessante Fehlermeldung aus der ich überhaupt nicht schlau werde:</p>
<blockquote>
<p>error C2440: 'initializing' : cannot convert from 'int (__cdecl *)(const char *)' to 'int (__cdecl *)(const char *)'<br />
1&gt; None of the functions with this name in scope match the target type</p>
</blockquote>
<pre><code class="language-cpp">//console.cpp (gekürzt)
int Console::Register(int (*function)(std::string), std::string name)
{
	int (*temp)(const char*) = (ConsoleTemplate::ConvertToLuaFunction&lt;function&gt;); //hier ist der compilerfehler
		RegisterWithLua(temp);
	}
	return 0;	
}

//console.h (gekürzt)
class Console {
private:
	int RegisterWithLua(int (*function)(const char*));
public:
	int Register(int (*function)(std::string), std::string name);
};

namespace ConsoleTemplate {
	template&lt;int (*T)(std::string)&gt; int ConvertToLuaFunction(const char* parameter)
	{
		std::string temp(parameter);
		return T(temp);
	}
}
</code></pre>
<p>Was zum Teufel? &quot;cannot convert from 'int (__cdecl *)(const char *)' to 'int (__cdecl *)(const char *)'&quot; ?<br />
Ich bin mir ja sicher, das ich irgendwas mit dem template verhaun hab, aber was das genau sein soll, da hab ich bei dieser Fehlermeldung wirklich keine Ahnung.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/215958/compilerfehler-mit-funktionszeigern-und-template</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 19:22:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/215958.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Jun 2008 13:16:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Compilerfehler mit Funktionszeigern und Template on Tue, 17 Jun 2008 13:16:13 GMT]]></title><description><![CDATA[<p>Ich hab mit Visual Studio 2008 beim kompilieren folgenden codes eine interessante Fehlermeldung aus der ich überhaupt nicht schlau werde:</p>
<blockquote>
<p>error C2440: 'initializing' : cannot convert from 'int (__cdecl *)(const char *)' to 'int (__cdecl *)(const char *)'<br />
1&gt; None of the functions with this name in scope match the target type</p>
</blockquote>
<pre><code class="language-cpp">//console.cpp (gekürzt)
int Console::Register(int (*function)(std::string), std::string name)
{
	int (*temp)(const char*) = (ConsoleTemplate::ConvertToLuaFunction&lt;function&gt;); //hier ist der compilerfehler
		RegisterWithLua(temp);
	}
	return 0;	
}

//console.h (gekürzt)
class Console {
private:
	int RegisterWithLua(int (*function)(const char*));
public:
	int Register(int (*function)(std::string), std::string name);
};

namespace ConsoleTemplate {
	template&lt;int (*T)(std::string)&gt; int ConvertToLuaFunction(const char* parameter)
	{
		std::string temp(parameter);
		return T(temp);
	}
}
</code></pre>
<p>Was zum Teufel? &quot;cannot convert from 'int (__cdecl *)(const char *)' to 'int (__cdecl *)(const char *)'&quot; ?<br />
Ich bin mir ja sicher, das ich irgendwas mit dem template verhaun hab, aber was das genau sein soll, da hab ich bei dieser Fehlermeldung wirklich keine Ahnung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1530843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1530843</guid><dc:creator><![CDATA[Wermo]]></dc:creator><pubDate>Tue, 17 Jun 2008 13:16:13 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler mit Funktionszeigern und Template on Tue, 17 Jun 2008 13:19:05 GMT]]></title><description><![CDATA[<p>Ups, mir ist beim löschen ein kleiner fehler unterlaufen,</p>
<pre><code class="language-cpp">int (*temp)(const char*) = (ConsoleTemplate::ConvertToLuaFunction&lt;function&gt;); //hier ist der compilerfehler
        RegisterWithLua(temp);
    }
    return 0;
</code></pre>
<p>muss</p>
<pre><code class="language-cpp">int (*temp)(const char*) = (ConsoleTemplate::ConvertToLuaFunction&lt;function&gt;); //hier ist der compilerfehler
RegisterWithLua(temp);
return 0;
</code></pre>
<p>sein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1530845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1530845</guid><dc:creator><![CDATA[Wermo]]></dc:creator><pubDate>Tue, 17 Jun 2008 13:19:05 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler mit Funktionszeigern und Template on Tue, 17 Jun 2008 13:27:36 GMT]]></title><description><![CDATA[<p>Bei mir VC2008 ergibt das keinen Fehler</p>
<pre><code class="language-cpp">int function(std::string param)
{
	return 0;
}

template&lt;int (*T)(std::string)&gt; int ConvertToLuaFunction(const char* parameter)
{
	std::string temp(parameter);
	return T(temp);
} 

int main(int argc, CHAR* argv[])
{
	int (*temp)(const char*) = (ConvertToLuaFunction&lt;function&gt;);
    ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1530851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1530851</guid><dc:creator><![CDATA[genau_wisser]]></dc:creator><pubDate>Tue, 17 Jun 2008 13:27:36 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler mit Funktionszeigern und Template on Tue, 17 Jun 2008 13:28:42 GMT]]></title><description><![CDATA[<p>Also wahrscheinlich liegt es an dem namespace, woraufhin der compiler eine funktion nichtmehr finden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1530854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1530854</guid><dc:creator><![CDATA[appendix]]></dc:creator><pubDate>Tue, 17 Jun 2008 13:28:42 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler mit Funktionszeigern und Template on Tue, 17 Jun 2008 13:29:43 GMT]]></title><description><![CDATA[<p>appendix schrieb:</p>
<blockquote>
<p>Also wahrscheinlich liegt es an dem namespace, woraufhin der compiler eine funktion nichtmehr finden kann.</p>
</blockquote>
<p>Daran liegt es auch nicht. <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="😮"
    /> <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="😮"
    /> VS2005?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1530856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1530856</guid><dc:creator><![CDATA[appendix2]]></dc:creator><pubDate>Tue, 17 Jun 2008 13:29:43 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler mit Funktionszeigern und Template on Tue, 17 Jun 2008 13:46:43 GMT]]></title><description><![CDATA[<p>Der gcc meckert auch:</p>
<pre><code>test.cpp: In member function ‘int Console::Register(int (*)(std::string), std::string)’:
test.cpp:20: error: ‘function’ cannot appear in a constant-expression
test.cpp:20: error: no matches converting function ‘ConvertToLuaFunction’ to type ‘int (*)(const char*)’
test.cpp:11: error: candidates are: template&lt;int (* T)(std::string)&gt; int ConsoleTemplate::ConvertToLuaFunction(const char*)
</code></pre>
<p>Ich vermute mal eine sache für C++-Standard kundige.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1530876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1530876</guid><dc:creator><![CDATA[appendix_gcc]]></dc:creator><pubDate>Tue, 17 Jun 2008 13:46:43 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler mit Funktionszeigern und Template on Tue, 17 Jun 2008 14:19:35 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int Console::Register(int (*function)(std::string), std::string name)
{
...
ConsoleTemplate::ConvertToLuaFunction&lt;function&gt;
</code></pre>
<p>function ist ein Funktionsparameter. Ein non-type Templateparameter muss aber ein konstanter Ausdruck sein (also bereits beim Compilieren bzw. Linken feststehen). Das kann so nicht funktionieren, sonst müsste ja während der Laufzeit Code generiert werden. Ich sehe keinen besonderen Grund, warum ConvertToLuaFunction überhaupt ein Template sein muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1530910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1530910</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 17 Jun 2008 14:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler mit Funktionszeigern und Template on Tue, 17 Jun 2008 14:19:31 GMT]]></title><description><![CDATA[<p>ah ok, jetzt ist klar (gcc fehlermeldung war auch etwas besser ^^)<br />
Naja, muss ich mich nach ner anderen Lösung umschaun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1530913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1530913</guid><dc:creator><![CDATA[Wermo]]></dc:creator><pubDate>Tue, 17 Jun 2008 14:19:31 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler mit Funktionszeigern und Template on Tue, 17 Jun 2008 14:35:06 GMT]]></title><description><![CDATA[<p>Jetzt doch noch mal ne Frage,</p>
<blockquote>
<p>Ich sehe keinen besonderen Grund, warum ConvertToLuaFunction überhaupt ein Template sein muss.</p>
</blockquote>
<p>Aufs template bin ich auch nur aus Ermangelungen sonstiger Ideen ausgewichen, wie könnte man es denn sonst machen?<br />
Ich brauch irgendeine Lösung die mir meinen Funktionspointer</p>
<pre><code class="language-cpp">int (*meineFunktion)(std::string)
</code></pre>
<p>auf eben sowas umbiegt (und zwar generisch):</p>
<pre><code class="language-cpp">int ConvertToLuaFunction(const char* parameter)
{
        std::string temp(parameter);
        return meineFunktion(temp);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1530928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1530928</guid><dc:creator><![CDATA[Wermo]]></dc:creator><pubDate>Tue, 17 Jun 2008 14:35:06 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler mit Funktionszeigern und Template on Tue, 17 Jun 2008 15:14:24 GMT]]></title><description><![CDATA[<p>Wie &quot;generisch&quot; muss es denn sein ?</p>
<p>Einerseits scheint ja meineFunktion() &quot;selbstschreibbar&quot; zu sein und andererseits scheint es Dir eigentlich um eine Konvertierung zu gehen (hier const char* -&gt; std::string).</p>
<p>Sowas machen eigentlich Compiler und/oder ggf. Konstruktoren oder Konvertierungsoperatoren ganz gut.</p>
<p>Folgendes ungetestet:<br />
In diesem Fall (char const*-&gt;std::string) brauchst Du die Funktion ConvertToLuaFunction() gar nicht, weil std::string eine implizite Konvertierung per Konstruktor erlaubt. Du kannst also direkt meineFunktion(&quot;Simon&quot;) aufrufen...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1530976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1530976</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 17 Jun 2008 15:14:24 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler mit Funktionszeigern und Template on Tue, 17 Jun 2008 15:50:51 GMT]]></title><description><![CDATA[<p>Ich breite das Beispiel glaub ich besser etwas aus:</p>
<p>Die prinzipielle Idee ist, ich habe eine Konsole, mit der ich Text eingeben kann.<br />
Dieser Konsole kann man per Register(...) eine Funktion mit einem Namen angeben, die Funktion wird bei eingabe von &quot;Name&quot; ausgeführt, mit danach folgenden parametern, die atm als string übergeben werden Später würd ich das gerne als std::vector<a href="std::string" rel="nofollow">std::string</a> machen, also schon in einzelne abschnitte geparst.<br />
Gleichzeitig soll ein registrieren mit der Konsole aber auch bewirken, dass dieselbe Funktion für lua registriert wird, und spätestens mit std::vector gibt es sicher keine automatische passende konvertierung mehr von dem lua-string-format (glaub ist char*)<br />
Dank luabind muss ich das ganze &quot;nur&quot; auf int funktion(const char*) umbiegen, aber falls ich ne Möglichkeit finden würde, das direkt auf int funktion(lua_State*) (für normales lua) umzuwandeln und zum laufen zu kriegen wärs noch besser.</p>
<p>Das ganze war im gezeigten code nicht ganz klar, da ich erstmal das komplizierte machen wollte (und offensichtlich daran gescheitert bin <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="😉"
    /> ) und danach mit dem einfachen weitermachen.</p>
<p>Aber abgesehen von dem konkreten Beispiel würd es mich auch prinzipiell interessieren wie man dass macht, luabind schaffts ja auch irgendwie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531011</guid><dc:creator><![CDATA[Wermo]]></dc:creator><pubDate>Tue, 17 Jun 2008 15:50:51 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler mit Funktionszeigern und Template on Tue, 17 Jun 2008 16:02:40 GMT]]></title><description><![CDATA[<p>Wermo schrieb:</p>
<blockquote>
<p>...spätestens mit std::vector gibt es sicher keine automatische passende konvertierung mehr von dem lua-string-format (glaub ist char*)...</p>
</blockquote>
<p>Dann mach Dir doch eine:</p>
<pre><code class="language-cpp">struct luaVectorConverter {
   vector&lt;string&gt; data;
   luaVectorConverter(const char*);
   operator vector&lt;string&gt;() { return data; }
};
</code></pre>
<p>Das ist im Prinzip nichts Anderes als Deine Funktion ... nur eben in 2 Schritten.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531021</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 17 Jun 2008 16:02:40 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerfehler mit Funktionszeigern und Template on Tue, 17 Jun 2008 16:09:07 GMT]]></title><description><![CDATA[<p>Ok hast recht das ist eine idee.<br />
Das dürfte sich ja auch auf luaState* anwenden lassen denk ich mal<br />
Auf jedenfall vielen dank dir, camper und auch dem ersten unreg <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>Dann schau ich mal das ich das hinbekomm :&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531025</guid><dc:creator><![CDATA[Wermo]]></dc:creator><pubDate>Tue, 17 Jun 2008 16:09:07 GMT</pubDate></item></channel></rss>