Typenkonvertation nicht möglich C++

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Typenkonvertation nicht möglich C++

Beitrag von cloidnerux » Do Sep 03, 2009 7:14 pm

Ich habe in einem OpenGL Programm folgende Codezeile:

Code: Alles auswählen

windowClass.lpfnWndProc = &testClass::StaticWndProc;
Doch der Compiler meldet immer nur folgende Fehlermeldung:
error C2440: '=': 'LRESULT (__stdcall CADEngine::* )(HWND,UINT,WPARAM,LPARAM)' kann nicht in 'WNDPROC' konvertiert werden
1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
Ich habe es auch ohne "&" versucht, ohne "testClass::" davor, mit C- und C++-Casts aber alles Führte zu anderen Fehlermeldungen.
Ist ein Windowsprojekt unter Visual Studio 2009.

MfG cloidnerux.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Typenkonvertation nicht möglich C++

Beitrag von fat-lobyte » Do Sep 03, 2009 7:28 pm

cloidnerux hat geschrieben:Ich habe in einem OpenGL Programm folgende Codezeile:

Code: Alles auswählen

windowClass.lpfnWndProc = &testClass::StaticWndProc;
Einfach nur diese Zeile ist ziemlich schwer. Bitte Zeig uns auch die deklaratione
cloidnerux hat geschrieben:Ist ein Windowsprojekt unter Visual Studio 2009.
Kenn ich nicht... Kenn nur Visual Studio 2008 oder Visual Studio 2010 ^^
Welchen hast du jetzt wirklich?
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Typenkonvertation nicht möglich C++

Beitrag von cloidnerux » Do Sep 03, 2009 7:42 pm

Kenn ich nicht... Kenn nur Visual Studio 2008 oder Visual Studio 2010 ^^
Sry, Version 9 laos Visual Studio 2008.

Code: Alles auswählen

LRESULT CALLBACK StaticWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
Das ist di Funktionsdefinition dessen Addresse ich haben will.
Die Obige Codezeile ist in der Init Funktion der selben Klasse, also zugrifff ist gewärt.
Müsste ich nicht über this-> den pointer aufrufen?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Typenkonvertation nicht möglich C++

Beitrag von fat-lobyte » Do Sep 03, 2009 7:53 pm

cloidnerux hat geschrieben:Ich habe in einem OpenGL Programm folgende Codezeile:

Code: Alles auswählen

windowClass.lpfnWndProc = &testClass::StaticWndProc;
Doch der Compiler meldet immer nur folgende Fehlermeldung:
error C2440: '=': 'LRESULT (__stdcall CADEngine::* )(HWND,UINT,WPARAM,LPARAM)' kann nicht in 'WNDPROC' konvertiert werden
1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
Jetzt verstehe ich langsam... CADEngine ist die Klasse von testClass... oder wie??? Das braucht erklärung. was ist testClass, was ist CADEngine, was ist windowClass?? Ohne das ist es ziemlich schwierig dir zu helfen...

Du darfst wie du schon richtig gesagt hast nicht vergessen dass du bei Memberfunktionen noch einen versteckten Zeiger mitgeben musst, es sei denn sie sind static (ist StaticWndProc static? ich weiß es nicht, denn ich habe die deklaration nicht gesehen)
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Typenkonvertation nicht möglich C++

Beitrag von cloidnerux » Do Sep 03, 2009 7:58 pm

Also, CADEngine ist die Classe, StaticWndProc ist eine Memberfunktion der classe, die ich nicht static setzten kann, da sie extern Deklariert wird.
Ich versuche in der Init Funktion diesem aus der WinAPI stammenden Struct den Pointer zu dieser Memeberfunktion zu übergeben.
Doch er akzeptiert die Pointerkonvertiereung nicht.
Bei der Memberfunktion handelt es sich um den "Eventhandler" der Winapi, der egt nur eine andere Funktion aufruft um zugriff auf Classenmebeer zu bekommen.
Desswegen hat diese Funktion auch die Typischen LRESULT CALLBACK &%*! am anfang, egt sollte der Compiler das annehmen, doch will er das nicht.

Edit: Ich weiß jezt warum er die static Funktion nicht akzeptieren wollte, man muss den Funktionsprototypen mit static ausweisen, jedoch die Deklaration erfolgt ohne static, was ich nicht beachtet hatte. Jetzt funktioniert es. Danke an alle.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten