gcnew KeyEventHandler编译问题(VC ++)

时间:2010-01-03 00:50:29

标签: event-handling managed-c++ visual-c++

我的托管c ++代码无法使用错误消息进行编译

.\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

在window.h中

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

在window.cpp中

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

以后

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

帮助!

1 个答案:

答案 0 :(得分:2)

我想你的意思是说:

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

在C ++中,类函数指针由2个东西组成,实际指针(这个部分你正确)和一个指向“this”的指针传递给函数,该函数是持有的函数的类。功能。这是您的Window,而不是Microsoft的Form