<?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[Array of function pointers in MSVC10]]></title><description><![CDATA[<p>Hallöchen Community,</p>
<p>mein Problem ist eigentlich recht simpel. Wie ich es schon betitelt habe, möchte ich einen Array mit Funktionspointern schreiben. Dabei benutze ich den MSVC10-Compiler, weil ich derzeit mit Qt5 arbeite. Dies löse ich ungefähr so:</p>
<pre><code class="language-cpp">#include &lt;complex&gt;

typedef std::complex&lt;long double&gt; Complex;
typedef Complex(*MathFunction)(const Complex&amp;);

MathFunction function_ptrs[] = {
    std::acos,
    ...
};

int main() { return 0; }
</code></pre>
<p>Nun krieg ich aber eine Fehlermeldung raus:</p>
<pre><code>error C2440: 'initializing' : cannot convert from 'overloaded-function' to 'MathFunction'
</code></pre>
<p>Ich will mal lautstark behaupten, dass ich std::acos nicht übergeben kann, weil es zwei davon gibt - einmal im cmath-Header und einmal im complex-Header, wobei der Compiler dann schlussendlich nicht weiß, welche der beiden Funktionen er denn nun nehmen soll (wobei mich das wiederrum verwirrt, weil ich den cmath-Header nicht mal inkludiert habe). Nun dachte ich mir, es würde funktionieren, wenn ich die Funktion einfach caste, sprich...</p>
<pre><code class="language-cpp">MathFunction function_ptrs[] = {
    static_cast&lt;MathFunction&gt;(std::acos),
    ...
};
</code></pre>
<p>...aber...</p>
<pre><code>error C2440: 'static_cast' : cannot convert from 'overloaded-function' to 'MathFunction'
</code></pre>
<p>Mit einem Array vom Typ <code>std::function</code> ist es die gleiche Leier.</p>
<p>Ich habe den Code mit G++ kompiliert gehabt, und mit dem lief es einwandfrei. Das, was ich aber um jeden Preis vermeiden will, ist, dass ich die Qt-Library jetzt auch noch für GCC kompilieren muss, oder die pre-compiled Version downloaden muss. Ich möchte das ganze dennoch mit dem MSVC10-Compiler lösen.</p>
<p>Was ich also suche, ist ein Workaround. Gibt es denn gar keine Möglichkeit diese Funktionspointer in ein Array reinzuhauen, ohne dass mir der Compiler eine reinhaut? <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="😞"
    /><br />
~Optionale Frage: Ist das ein Bug vom MSVC10-Compiler?~</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/313577/array-of-function-pointers-in-msvc10</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 03:55:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313577.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 Feb 2013 19:05:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array of function pointers in MSVC10 on Mon, 04 Feb 2013 19:05:30 GMT]]></title><description><![CDATA[<p>Hallöchen Community,</p>
<p>mein Problem ist eigentlich recht simpel. Wie ich es schon betitelt habe, möchte ich einen Array mit Funktionspointern schreiben. Dabei benutze ich den MSVC10-Compiler, weil ich derzeit mit Qt5 arbeite. Dies löse ich ungefähr so:</p>
<pre><code class="language-cpp">#include &lt;complex&gt;

typedef std::complex&lt;long double&gt; Complex;
typedef Complex(*MathFunction)(const Complex&amp;);

MathFunction function_ptrs[] = {
    std::acos,
    ...
};

int main() { return 0; }
</code></pre>
<p>Nun krieg ich aber eine Fehlermeldung raus:</p>
<pre><code>error C2440: 'initializing' : cannot convert from 'overloaded-function' to 'MathFunction'
</code></pre>
<p>Ich will mal lautstark behaupten, dass ich std::acos nicht übergeben kann, weil es zwei davon gibt - einmal im cmath-Header und einmal im complex-Header, wobei der Compiler dann schlussendlich nicht weiß, welche der beiden Funktionen er denn nun nehmen soll (wobei mich das wiederrum verwirrt, weil ich den cmath-Header nicht mal inkludiert habe). Nun dachte ich mir, es würde funktionieren, wenn ich die Funktion einfach caste, sprich...</p>
<pre><code class="language-cpp">MathFunction function_ptrs[] = {
    static_cast&lt;MathFunction&gt;(std::acos),
    ...
};
</code></pre>
<p>...aber...</p>
<pre><code>error C2440: 'static_cast' : cannot convert from 'overloaded-function' to 'MathFunction'
</code></pre>
<p>Mit einem Array vom Typ <code>std::function</code> ist es die gleiche Leier.</p>
<p>Ich habe den Code mit G++ kompiliert gehabt, und mit dem lief es einwandfrei. Das, was ich aber um jeden Preis vermeiden will, ist, dass ich die Qt-Library jetzt auch noch für GCC kompilieren muss, oder die pre-compiled Version downloaden muss. Ich möchte das ganze dennoch mit dem MSVC10-Compiler lösen.</p>
<p>Was ich also suche, ist ein Workaround. Gibt es denn gar keine Möglichkeit diese Funktionspointer in ein Array reinzuhauen, ohne dass mir der Compiler eine reinhaut? <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="😞"
    /><br />
~Optionale Frage: Ist das ein Bug vom MSVC10-Compiler?~</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296061</guid><dc:creator><![CDATA[&amp;lt;InsertName&amp;gt;]]></dc:creator><pubDate>Mon, 04 Feb 2013 19:05:30 GMT</pubDate></item><item><title><![CDATA[Reply to Array of function pointers in MSVC10 on Mon, 04 Feb 2013 19:12:46 GMT]]></title><description><![CDATA[<p>Beim gcc und ideone klappt es ohne Probleme.<br />
Versuche mal einen reinterpret_cast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296062</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 04 Feb 2013 19:12:46 GMT</pubDate></item><item><title><![CDATA[Reply to Array of function pointers in MSVC10 on Mon, 04 Feb 2013 19:17:35 GMT]]></title><description><![CDATA[<p>Dein Code sieht für mich völlig korrekt aus (hab leider kein MSVC10). Beide Fälle sind genau so im Standard abgedeckt (13.4 bzw. [over.over]).</p>
<p>reinterpret_cast ist hier aber völlig fehl am Platz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296063</guid><dc:creator><![CDATA[simpelAntwort]]></dc:creator><pubDate>Mon, 04 Feb 2013 19:17:35 GMT</pubDate></item><item><title><![CDATA[Reply to Array of function pointers in MSVC10 on Mon, 04 Feb 2013 19:21:55 GMT]]></title><description><![CDATA[<p>Hmm, vielleicht stimmt das doch nicht, was ich gesagt habe. acos ist ja ein Template.</p>
<p>Versuch mal</p>
<pre><code class="language-cpp">std::acos&lt;long double&gt;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">std::acos&lt;Complex::value_type&gt;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2296064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296064</guid><dc:creator><![CDATA[simpelAntwort]]></dc:creator><pubDate>Mon, 04 Feb 2013 19:21:55 GMT</pubDate></item><item><title><![CDATA[Reply to Array of function pointers in MSVC10 on Mon, 04 Feb 2013 19:26:39 GMT]]></title><description><![CDATA[<p>simpelAntwort: netter Einfall, aber der erzeugt leider die gleiche Fehlermeldung <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2296065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296065</guid><dc:creator><![CDATA[&amp;lt;InsertName&amp;gt;]]></dc:creator><pubDate>Mon, 04 Feb 2013 19:26:39 GMT</pubDate></item><item><title><![CDATA[Reply to Array of function pointers in MSVC10 on Mon, 04 Feb 2013 19:31:03 GMT]]></title><description><![CDATA[<p>Dürfte sich um einen Compilerbug handeln (sollte laut §13.4/1 imo funktionieren), wäre nett, wenn du das gleich auf Microsoft Connect reporten würdest: <a href="http://connect.microsoft.com/VisualStudio" rel="nofollow">http://connect.microsoft.com/VisualStudio</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296066</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 04 Feb 2013 19:31:03 GMT</pubDate></item><item><title><![CDATA[Reply to Array of function pointers in MSVC10 on Mon, 04 Feb 2013 19:31:47 GMT]]></title><description><![CDATA[<p>std::acos für std::complex wurde erst mit C++11 eingeführt; diesen Standard unterstützt MSVC10 halt nicht vollständig. Er wird die Funktionsvorlage stumpf nicht haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296067</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 04 Feb 2013 19:31:47 GMT</pubDate></item><item><title><![CDATA[Reply to Array of function pointers in MSVC10 on Mon, 04 Feb 2013 19:38:50 GMT]]></title><description><![CDATA[<p>In der Tat, MSVC11 kompilierts problemlos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296069</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 04 Feb 2013 19:38:50 GMT</pubDate></item><item><title><![CDATA[Reply to Array of function pointers in MSVC10 on Mon, 04 Feb 2013 19:42:33 GMT]]></title><description><![CDATA[<p>seldon: Stimmt, eben getestet.</p>
<p>Ich denke auch grad an einen Bug, denn...</p>
<pre><code class="language-cpp">void foo(int i);
void foo(float f);

void(*fptr_array[])(int) = {
	foo
};
</code></pre>
<p>...sowie...</p>
<pre><code class="language-cpp">void foo(int i);
void foo(float f);

void(*fptr_array[])(int) = {
	static_cast&lt;void(*)(int)&gt;(foo)
};
</code></pre>
<p>will einfach nicht kompilieren.<br />
Nadann! Auf zum ersten Bugreport! <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>
<p>Danke euch für die Hilfe.<br />
MfG, spiri.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296072</guid><dc:creator><![CDATA[&amp;lt;InsertName&amp;gt;]]></dc:creator><pubDate>Mon, 04 Feb 2013 19:42:33 GMT</pubDate></item><item><title><![CDATA[Reply to Array of function pointers in MSVC10 on Mon, 04 Feb 2013 19:49:39 GMT]]></title><description><![CDATA[<p>Wie seldon schon geschrieben hat: Es ist kein Bug, es liegt einfach daran, dass MSVC 10 den entsprechenden Overload von std::acos noch nicht implementiert. In MSVC 11 funktioniert alles problemlos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296074</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 04 Feb 2013 19:49:39 GMT</pubDate></item></channel></rss>