<?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[error: invalid cast to function type &#x27;void* ()()&#x27;]]></title><description><![CDATA[<p>Habe in einem globalen Klassenelement (struct) die Adresse eines Members ( void *member(); ) gespeichert für einen recall.<br />
Jetzt habe ich vergessen wie man eine Funktionsadresse castet für einen Aufruf.<br />
Den momentanen Fehler gibt es mit diesem Cast:</p>
<pre><code>(void*()) Entry[ i ]-&gt;*member();
</code></pre>
<p>oder auch diesem:</p>
<pre><code>(void*()) Entry[ i ].member();
</code></pre>
<p>Kann mir da jemand weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241651/error-invalid-cast-to-function-type-void</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 07:47:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241651.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 23 May 2009 23:03:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to error: invalid cast to function type &#x27;void* ()()&#x27; on Sat, 23 May 2009 23:03:22 GMT]]></title><description><![CDATA[<p>Habe in einem globalen Klassenelement (struct) die Adresse eines Members ( void *member(); ) gespeichert für einen recall.<br />
Jetzt habe ich vergessen wie man eine Funktionsadresse castet für einen Aufruf.<br />
Den momentanen Fehler gibt es mit diesem Cast:</p>
<pre><code>(void*()) Entry[ i ]-&gt;*member();
</code></pre>
<p>oder auch diesem:</p>
<pre><code>(void*()) Entry[ i ].member();
</code></pre>
<p>Kann mir da jemand weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714776</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Sat, 23 May 2009 23:03:22 GMT</pubDate></item><item><title><![CDATA[Reply to error: invalid cast to function type &#x27;void* ()()&#x27; on Sat, 23 May 2009 23:14:06 GMT]]></title><description><![CDATA[<p>bastl schrieb:</p>
<blockquote>
<p>Kann mir da jemand weiterhelfen?</p>
</blockquote>
<p>Ja.</p>
<p>Wenn du uns den relevanten Code lieferst. Also z.B. wie du das struct definiert hast, was Entry ist usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714781</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 23 May 2009 23:14:06 GMT</pubDate></item><item><title><![CDATA[Reply to error: invalid cast to function type &#x27;void* ()()&#x27; on Sat, 23 May 2009 23:14:22 GMT]]></title><description><![CDATA[<p>Habe vergessen einen Prototyp anzulegen - mal schauen obs funzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714782</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Sat, 23 May 2009 23:14:22 GMT</pubDate></item><item><title><![CDATA[Reply to error: invalid cast to function type &#x27;void* ()()&#x27; on Sat, 23 May 2009 23:42:38 GMT]]></title><description><![CDATA[<p>Kode - mal schauen:<br />
main.cpp:</p>
<pre><code>MyClass *global_dlg = NULL;

main(){...}
</code></pre>
<p>irgendwo kann dieser Dialog im Programm deffiniert werden.<br />
myclass.h:</p>
<pre><code>class MyClass: public QDialog
	{
		Q_OBJECT
	public:
	...
		struct Entry
			{
			int state;
			bool *value;
			char *name;
			QWidget *w;
			bool *value_w;
			void *member();
			};
	...
		int register_bool( bool *value, char *name, QWidget *w,  bool *value_w, void *member, char *description = NULL );
</code></pre>
<p>O.K. jetzt wird die Funktion aufgerufen, nur die Adresse wird noch falsch benutzt - hängt sich auf - noch ein bischen rumexeperimentieren ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714786</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Sat, 23 May 2009 23:42:38 GMT</pubDate></item><item><title><![CDATA[Reply to error: invalid cast to function type &#x27;void* ()()&#x27; on Sun, 24 May 2009 00:28:07 GMT]]></title><description><![CDATA[<p>dein Entry[i] ganz oben passt überhauptnicht zu der Struct-definition. irgendwie scheinst du da murks zu machen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714791</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sun, 24 May 2009 00:28:07 GMT</pubDate></item><item><title><![CDATA[Reply to error: invalid cast to function type &#x27;void* ()()&#x27; on Sun, 24 May 2009 01:19:02 GMT]]></title><description><![CDATA[<p>So passierts, wenn man Kode zusammenfasst.<br />
Nennen wir es boolEntry.<br />
Habe da einige Fehler drin (:6,:13,:16)! Jetzt wird das alles noch umständlicher, da nur static Funktionen gelinkt, bzw. als Laufzeitobjekte zulässig sind:</p>
<pre><code>class MyClass: public QDialog
    {
        Q_OBJECT
    public:
    ...
        struct boolEntry
            {
            int state;
            bool *value;
            char *name;
            QWidget *w;
            bool *value_w;
            void (*member)(QWidget *w);
            };
    ...
        int register_bool( bool *value, char *name, QWidget *w,  bool *value_w, void(*member)(QWidget *w), char *description = NULL );
</code></pre>
<p>Deshalb brauche ich jetzt noch den Zeiger auf das Klassenobject, das dann in dem member gecastet wird und ich somit in dem member auf die Klassenelemente zugreifen kann.<br />
(Sowas umständliches, da würde man doch am liebsten alles in Assembler programmieren)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714797</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Sun, 24 May 2009 01:19:02 GMT</pubDate></item><item><title><![CDATA[Reply to error: invalid cast to function type &#x27;void* ()()&#x27; on Sun, 24 May 2009 11:57:44 GMT]]></title><description><![CDATA[<p>bastl schrieb:</p>
<blockquote>
<p>So passierts, wenn man Kode zusammenfasst.</p>
</blockquote>
<p>ann mach ich doch mal einen Vorschlag: Gib uns doch bitte einen vollständigen und Code, der auf das wesentliche reduziert ist, den man durch den Compiler jagen kann so dass man nur dein beschriebenes Problem bekommt. Bei den Fetzen die du uns hier ausspuckst blickt man nicht so recht durch, geschweige denn dass man erkennt wo eigentlich dein Problem ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714902</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sun, 24 May 2009 11:57:44 GMT</pubDate></item><item><title><![CDATA[Reply to error: invalid cast to function type &#x27;void* ()()&#x27; on Sun, 24 May 2009 12:35:28 GMT]]></title><description><![CDATA[<p>Der Cast dort oben ist mir sowieso suspekt; es müsste wenn überhaupt <code>(void (*)())</code> heissen, und auch dies würde keinen Sinn ergeben, da es ja um Memberfunktionen geht. Stattdessen ist dort doch das Casting sowieso überflüssig. Um die Kentnisse nochmals ein wenig aufzufrischen was dieses Thema betrifft, hier ein kleines Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class foo
{
public:
    void bar() const
    {
        cout &lt;&lt; &quot;TEST&quot; &lt;&lt; endl;
    }
};

int main()
{
    foo thingy;
    void (foo::*mem_fun_ptr)() const = &amp;foo::bar;
    (thingy.*mem_fun_ptr)();

    return 0;
}
</code></pre>
<p>MfG <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714924</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Sun, 24 May 2009 12:35:28 GMT</pubDate></item><item><title><![CDATA[Reply to error: invalid cast to function type &#x27;void* ()()&#x27; on Tue, 26 May 2009 22:14:14 GMT]]></title><description><![CDATA[<p>Mit der Beschreibung &quot;recall&quot; sollte die Problemstellung eigentlich voll beschrieben sein.<br />
Sorry, aber es gibt nicht mehr betroffenen Kode.<br />
Jedoch heißt dieses Projekt Keda und kann downgeloaded werden.<br />
Dieses Problem ist dann in der Version 0.1.6 umgesetzt und funktioniert.<br />
Die Klasse heißt dann Config und das zugehörige Objekt config_dlg; über /Tools/Oscilloscope kann das testwidget eingefügt werden und im Konfigurationsdialog getestet werden.<br />
<a href="ftp://ftp.berlios.de/pub/keda" rel="nofollow">ftp://ftp.berlios.de/pub/keda</a></p>
<p>Im letzten Kode oben sind immer noch ein paar Fehler, jedoch wird die Problematik sehr gut auf dieser Seite erklärt:<br />
<a href="http://www.goingware.com/tips/member-pointers.html" rel="nofollow">http://www.goingware.com/tips/member-pointers.html</a><br />
Hier müssen die Grenzen von C++ Aufgefürt werden und ich finde dies ist ein sehr schönes Beispiel. Ich habe mich auch schon gewundert, warum der KConfigDialog so kompliziert aufgebaut ist und stoße hier auch an die unzumutbaren Grenzen von C++. Das soll jetzt nicht heißen, daß mit C++ irgendetwas nicht möglich sei,edoch ist die schreibarbeit und der logische Aufwand so aufwendig, zeitraubend und sinnloß, daß ich verstehe, daß hier viele Programmierer zum Assembler (NASM) greifen und assembler Objecte einlinken.<br />
Vorallem hat C++ volatile und könnte sehr gut direkte Zeiger auf Member zulassen.<br />
Besser wäre jedoch ein &quot;absoluter&quot; Zeiger, dem alle Arten von Zeigern zuweisbar sind und an anderer Stelle beliebig verwendet werden kann.<br />
Das Wissen braucht ein Programmierer in jeder Sprache, jedoch wird er hier in C++ von seiner eigenlichen Aufgabe &quot;unzumutbar abgelenkt&quot;.<br />
So genug!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714967</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Tue, 26 May 2009 22:14:14 GMT</pubDate></item><item><title><![CDATA[Reply to error: invalid cast to function type &#x27;void* ()()&#x27; on Sun, 24 May 2009 15:22:30 GMT]]></title><description><![CDATA[<p>/rant/ schrieb:</p>
<blockquote>
<p>int main()<br />
{<br />
foo thingy;<br />
void (foo::*mem_fun_ptr)() const = &amp;foo::bar;<br />
(thingy.*mem_fun_ptr)();</p>
<p>return 0;<br />
}[/cpp]</p>
<p>MfG <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="😉"
    /></p>
</blockquote>
<p>Genau hier liegt das Problem beim Aufruf von Klassenfunktionen ich weiß nicht ob Klasse des Typs foo ist. Somit muss ich den Zeiger auf das Klassenobjekt mit übergeben und alles static abhandeln (keine Klassenfunktion). Nur der, der die Klasse foo geschrieben hat kennt die Klasse foo und kann den Member aus foo so aufrufen. ich kann das jedenfals nicht, denn ich weiß nicht mal, ob die Klasse des Members vom Typ foo ist. Ich kann nur sagen, daß die Funktion void ()(QWidget*) aussieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714994</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Sun, 24 May 2009 15:22:30 GMT</pubDate></item><item><title><![CDATA[Reply to error: invalid cast to function type &#x27;void* ()()&#x27; on Sun, 24 May 2009 16:27:52 GMT]]></title><description><![CDATA[<p>bastl schrieb:</p>
<blockquote>
<p>...Jetzt habe ich vergessen wie man eine Funktionsadresse castet für einen Aufruf...</p>
</blockquote>
<p>Also mal ganz wild spekuliert: Willst Du einen Memberfunktion zu einer freien Funktion casten?<br />
Also sowas:</p>
<pre><code class="language-cpp">struct A {
  void member();
};

int main() {
   A a;
   void (*f)();
   f = (caste irgendwie) a.member();
...
</code></pre>
<p>falls ja: Vergiß es - geht nicht!<br />
(ist ein prinzipielles Problem - kein &quot;muss man nur ein wenig rumschrauben-Problem)</p>
<p>Schau mal bei den FAQs unter &quot;Memberfunktion&quot; nach ... da steht Einiges dazu drin. Auch, wie man Situationen, in denen man meint, das zu brauchen, vernünftig und sicher löst.</p>
<p>Falls nicht: Vergessen, was ich schrieb.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715021</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sun, 24 May 2009 16:27:52 GMT</pubDate></item><item><title><![CDATA[Reply to error: invalid cast to function type &#x27;void* ()()&#x27; on Sun, 24 May 2009 22:46:37 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Also mal ganz wild spekuliert: Willst Du einen Memberfunktion zu einer freien Funktion casten?<br />
falls ja: Vergiß es - geht nicht!<br />
(ist ein prinzipielles Problem - kein &quot;muss man nur ein wenig rumschrauben-Problem)</p>
</blockquote>
<p>Ja, das geht natürlich nicht.<br />
Aber den Cast braucht man ja auch nicht. Die Funktion bleibt member, wird aber static deklariert, wie ein Thread. Jedoch habe ich da einen Fehler, die Funktion ist vom Typ void(<em>)(QWidget</em>) und die übergebene Member-Addresse dann vom Typ void*(<em>)(QWidget</em>)! Und dann funzts, wenigstens bei mir jetzt.<br />
Nacher gibts die deteilierte Auflösung mit Code und so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715128</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Sun, 24 May 2009 22:46:37 GMT</pubDate></item><item><title><![CDATA[Reply to error: invalid cast to function type &#x27;void* ()()&#x27; on Mon, 25 May 2009 08:26:14 GMT]]></title><description><![CDATA[<p>bastl schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Also mal ganz wild spekuliert: Willst Du einen Memberfunktion zu einer freien Funktion casten?<br />
falls ja: Vergiß es - geht nicht!<br />
(ist ein prinzipielles Problem - kein &quot;muss man nur ein wenig rumschrauben-Problem)</p>
</blockquote>
<p>Ja, das geht natürlich nicht....</p>
</blockquote>
<p>OK, wenn Dir das schon bekannt war, will ich nichts gesagt haben.</p>
<p>Es ist halt in 95% dieser Fälle hier das Problem.</p>
<p>Nicht für ungut,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715221</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 25 May 2009 08:26:14 GMT</pubDate></item><item><title><![CDATA[Reply to error: invalid cast to function type &#x27;void* ()()&#x27; on Mon, 25 May 2009 21:41:13 GMT]]></title><description><![CDATA[<p>Hier also der Recall mit einem Zeiger auf eine Memberfunktion:</p>
<p>UsedClass : Ist die Klasse die den Recall ausführt, bzw. die eine Funktion einer beliebigen anderen Klasse ausführen möchte.<br />
AnyClass : Ist irgend eine Klasse, die eine Klassenfunktion, Member, bereitstellt, die auf den Recall Typ aus UsedClass zutrifft. In diesem Beisbiel baut AnyClass auf die Basisclasse QWidget auf.</p>
<p>UsedClass.h</p>
<pre><code>class UsedClass
   {
   ...
   struct Record
      {
      void *( *PTR_member )( QWidget* );   //Name dieses Zeigers ist &quot;PTR_member&quot;
      QWidget *w  //Zugehöriges Objekt, die die Funktion mit der Memberaddresse enthält
      }

   Record *records;
   int anzahl;

   ...
   int register_member( void*( *member )( QWidget* ), QWidget *w ); //gibt eine Registriernummer zurück.
   void resetWidget( int nummer );   //Diese Funktion führt den Recall aus.
   ...
   }
</code></pre>
<p>UsedClass.cpp</p>
<pre><code>...
int UsedClass::register_member( void*( *member )( QWidget* ), QWidget *w )
   {
   Record *tmp = new Record[ anzahl + 1 ];

   int i = 0;
   while ( i &lt; anzahl )
      {
      tmp[ i ] = records [ i ];
      i++;
      }

   anzahl ++;
   tmp[ i ].PTR_member = member;
   tmp[ i ].w = w;
   records = tmp;
   }

void UsedClass::resetWidget( int nummer )
   {
   records[ nummer ].PTR_member( records[ nummer ].w );   //Recall
   } 
...
</code></pre>
<p>AnyClass.h</p>
<pre><code>class AnyClass : public QWidget
   {
   ...
   volatile double MyAccessValues;   //Variablen, die in der Recall-Memberfunktion benützt werden. volatile = Wert wird sofort in diese Variable zurückgeschrieben und nicht in einem Register zwischengespeichert (Kodeoptimierung = aus)
   ...
   static void *reset( QWidget *w );   //Recall-Funktion, resetet z.B das Widget
   ...
   }
</code></pre>
<p>AnyClass.cpp</p>
<pre><code>...
void *AnyClass::reset( QWidget *w )
   {
   AnyClass *ptr = (( AnyClass* ) w ); 
   ...
   ptr-&gt;MyAccessValues = 0;
   ...
   }
...
</code></pre>
<p>Irgendwo dann im Programm:</p>
<pre><code>...
UsedClass *UsedDialog = new UsedClass(...);   //Ein Object (UsedDialog) von UsedClass wird erstellt 
...
AnyClass *mywidget = new AnyClass(...)   //Ein Object (mywidget) von AnyClass wird erstellt 
...
meinenummer = UsedDialog-&gt;register_member(  &amp;mywidget-&gt;reset, mywidget );
...
UsedDialog-&gt;resetWidget( meinenummer );   //Recall aus UsedDialog von mywidget-&gt;reset()
...
</code></pre>
<p>Also der, der die UsedClass in seinem Programm benützt, muss folgendes einhalten:<br />
-die Recallfunktion die er übergibt muss dem erwarteten Typ entsprechen<br />
-den Zeiger den er zurückbekommt muß er neu &quot;casten&quot; (( SeineKlasse* ) Zeiger ) um auf Klassenelemente zuzugreifen<br />
-die Memberfunktion die er übergibt muss static deffiniert sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715738</guid><dc:creator><![CDATA[bastl]]></dc:creator><pubDate>Mon, 25 May 2009 21:41:13 GMT</pubDate></item></channel></rss>