2010-01-03 5 views
1

Mon code managé C++ ne parvient pas à compiler avec le message d'erreurproblème compiler gcnew KeyEventHandler (VC++)

.\Window.cpp(11) : error C2440: 'initializing' : cannot convert from 'System::Windows::Forms::Form ^' to 'Enviroment::Window ^' 
     No user-defined-conversion operator available, or 
     Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
.\Window.cpp(11) : error C3754: delegate constructor: member function 'Enviroment::Window::_keydown' cannot be called on an instance of type 'System::Windows::Forms::Form ^' 

Error 1 error C2440: 'initializing' : cannot convert from 'System::Windows::Forms::Form ^' to 'Enviroment::Window ^' c:\Users\Thomas\Documents\Visual Studio 2008\Projects\Project_X\Project_X\Window.cpp 11 
Error 2 error C3754: delegate constructor: member function 'Enviroment::Window::_keydown' cannot be called on an instance of type 'System::Windows::Forms::Form ^' c:\Users\Thomas\Documents\Visual Studio 2008\Projects\Project_X\Project_X\Window.cpp 11 

Dans window.h

ref class Window 
    { 
    public: 
     Window(); 
     void _keydown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e); 
    } 

Dans window.cpp

Window::Window() 
    { 
     Form^ form = gcnew Form(); 
     form->KeyDown+= gcnew KeyEventHandler(form, &Window::_keydown); 
} 

et plus tard

void Window::_keydown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) 
    { 
     //stuff 
    } 

Aide!

Répondre

2

Je pense que vous voulez dire:

form->KeyDown+= gcnew KeyEventHandler(this, &Window::_keydown); 

En C++, un pointeur de fonction de classe est composée de 2 choses, le pointeur réel (cette partie que vous avez à droite) et un pointeur vers « ce » pour être passé à la fonction, qui est du type de la classe qui détient la fonction. Ceci est votre Window, pas Form de Microsoft.

+0

Spot sur :) À votre santé! – gingerbreadboy

Questions connexes