代码之家  ›  专栏  ›  技术社区  ›  gingerbreadboy

gcnew keyEventHandler编译问题(vc++)

  •  1
  • gingerbreadboy  · 技术社区  · 16 年前

    我的托管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
    

    在窗口h

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

    在窗口中

    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 回复  |  直到 16 年前
        1
  •  2
  •   Blindy    16 年前

    我想你的意思是说:

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

    在C++中,一个类函数指针由2个东西组成,即实际指针(这一部分是正确的)和一个指向“函数”的指针,这个函数是保持函数的类的类型。这是你的 Window ,不是微软的 Form .

    推荐文章