<?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[Funktionszeigerübergabe in Klasse]]></title><description><![CDATA[<p>Hiho.</p>
<p>Ich include zwar die &lt;windows.h&gt;, aber denke dennoch, dass es sich hier nicht um ein WinAPI, sondern vielmehr um ein allgemeines C++ Problem handelt, da es im Grunde genommen Funktionszeiger betrifft.</p>
<p>Ich versuche in einer Klasse durch eine klasseneigene Methode die Referenz einer Funktion aus dem Hauptprogramm zu speichern.</p>
<p>Später möchte ich mit der gespeicherten Funktion in der Klasse wie mit einer normalen weiterarbeiten könnnen.</p>
<p>Ich hatte mal folgenden Ansatz versucht:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

class Klasse
{
	private:
		BOOL CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );

	public:
		Klasse();
		~Klasse();

		void setWndProc( BOOL CALLBACK ( HWND, UINT, WPARAM, LPARAM ) );
};

void Klasse::setWndProc( BOOL CALLBACK newWndProc( HWND, UINT, WPARAM, LPARAM ) )
{
	WndProc = newWndProc;
};

BOOL CALLBACK WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	return false;
};

int main( void )
{
	Klasse MeineKlasse;

	MeineKlasse.setWndProc( WindowProc );

	return 0;
};
</code></pre>
<p>Leider bekomme ich anschließend folgende Fehlermeldung:</p>
<p>Fehler 1 error C2659: &quot;=&quot;: Funktion als linker Operand.</p>
<p>Was ist zu tun?</p>
<p>Gruß, paSe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237810/funktionszeigerübergabe-in-klasse</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 09:34:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237810.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 02 Apr 2009 08:46:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionszeigerübergabe in Klasse on Thu, 02 Apr 2009 08:46:01 GMT]]></title><description><![CDATA[<p>Hiho.</p>
<p>Ich include zwar die &lt;windows.h&gt;, aber denke dennoch, dass es sich hier nicht um ein WinAPI, sondern vielmehr um ein allgemeines C++ Problem handelt, da es im Grunde genommen Funktionszeiger betrifft.</p>
<p>Ich versuche in einer Klasse durch eine klasseneigene Methode die Referenz einer Funktion aus dem Hauptprogramm zu speichern.</p>
<p>Später möchte ich mit der gespeicherten Funktion in der Klasse wie mit einer normalen weiterarbeiten könnnen.</p>
<p>Ich hatte mal folgenden Ansatz versucht:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

class Klasse
{
	private:
		BOOL CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );

	public:
		Klasse();
		~Klasse();

		void setWndProc( BOOL CALLBACK ( HWND, UINT, WPARAM, LPARAM ) );
};

void Klasse::setWndProc( BOOL CALLBACK newWndProc( HWND, UINT, WPARAM, LPARAM ) )
{
	WndProc = newWndProc;
};

BOOL CALLBACK WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	return false;
};

int main( void )
{
	Klasse MeineKlasse;

	MeineKlasse.setWndProc( WindowProc );

	return 0;
};
</code></pre>
<p>Leider bekomme ich anschließend folgende Fehlermeldung:</p>
<p>Fehler 1 error C2659: &quot;=&quot;: Funktion als linker Operand.</p>
<p>Was ist zu tun?</p>
<p>Gruß, paSe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689693</guid><dc:creator><![CDATA[unlimieD.paSe]]></dc:creator><pubDate>Thu, 02 Apr 2009 08:46:01 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeigerübergabe in Klasse on Thu, 02 Apr 2009 09:18:30 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">private:
        BOOL CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
</code></pre>
<p>ist kein Funktionszeiger, sondern eine Funktionsdeklaration.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689713</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 02 Apr 2009 09:18:30 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeigerübergabe in Klasse on Thu, 02 Apr 2009 09:28:52 GMT]]></title><description><![CDATA[<p>Und Funktionszeiger sind mehr C als C++</p>
<p>In c++ kann man das eleganter loesen: Nen Interface zum aufrufen der funktion mit den Parametern, dann genau so viele Spezialisierte Klassen wie man unterschiedliche Funktionen hat, die den aufruf genau an die funktion weiterleiten.<br />
Und das Austauschen der funktionalitaet dann dadurch realiseren, das man dem zeiger auf die Basisklasse unterschiedliche Implementationen unterschiebt.<br />
(Polymorphie !).<br />
Iss zwar ne Menge mehr schreibarbeit, wird sich im Laufzeitverhalten nur unmerklich auswirken, iss aber um welten flexibler und übersichtlicher/wartbarer ....</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689719</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Thu, 02 Apr 2009 09:28:52 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeigerübergabe in Klasse on Thu, 02 Apr 2009 10:01:05 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">private:
        BOOL CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
</code></pre>
<p>ist kein Funktionszeiger, sondern eine Funktionsdeklaration.</p>
</blockquote>
<p>Da hast du wohl recht.</p>
<p>Danke für den kleinen Denkanstoß ...</p>
<p>habe mir jetzt mal die WNDCLASS Struktur genauer angesehen, schließlich wird dort hinein die WndProc referenziert.</p>
<p>Undzwar nach WNDPROC lpfnWndProc.</p>
<p>Habe jetzt folgendes probiert:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt; 

class Klasse 
{ 
    private: 
        WNDPROC WndProc; 

    public: 
        Klasse(); 
        ~Klasse(); 

        void setWndProc( WNDPROC ); 
}; 

void Klasse::setWndProc( WNDPROC newWndProc ) 
{ 
    WndProc = newWndProc; 
}; 

BOOL CALLBACK WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) 
{ 
    return false; 
}; 

int main( void ) 
{ 
    Klasse MeineKlasse; 

    MeineKlasse.setWndProc( WindowProc ); 

    return 0; 
};
</code></pre>
<p>Läuft leider auch nicht. <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>
<p><strong>EDIT:</strong></p>
<p>OK, habs hinbekommen.</p>
<p>WNDPROC bezieht sich auf LRESULT CALLBACK für normale Windows.</p>
<p>Für BOOL CALLBACK, also Dialogs benötigt man DLGPROC.</p>
<p>Also ...</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

class Klasse 
{ 
    private: 
		DLGPROC DlgProc;

    public: 
        void setWndProc( DLGPROC );
}; 

void Klasse::setWndProc( DLGPROC newDlgProc ) 
{ 
    DlgProc = newDlgProc; 
};

BOOL CALLBACK DialogProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) 
{ 
    return false;
}; 

int main( void ) 
{ 
    Klasse MeineKlasse; 

    MeineKlasse.setWndProc( DialogProc );

    return 0; 
};
</code></pre>
<p>Danke für die Unterstützung.</p>
<p>Ach und by the way...</p>
<pre><code class="language-cpp">Klasse();
~Klasse();
</code></pre>
<p>ohne Definition verursachen Linkerfehler.<br />
Nur, damit sich hier keiner beschwert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Gruß, paSe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689724</guid><dc:creator><![CDATA[unlimieD.paSe]]></dc:creator><pubDate>Thu, 02 Apr 2009 10:01:05 GMT</pubDate></item></channel></rss>