Fehler bei Delegate-Konstruktor-Aufruf



  • Hallo Forengemeinschaft, mich quält ein kleines Problemchen bei dem ich mir nicht zu helfen weiß. Beim Aufruf eines Delegate-Konstruktors bekomme ich folgende Fehlermeldung:

    error C3352: 'void PropSim::Relations::ConnectionChangedEvent(System::Object ^)' : the specified function does not match the delegate type 'void (System::Object ^)

    Leider verstehe ich sie nicht ganz. Ich dachte

    PropSim::Relations::ConnectionChangedEvent(System::Object ^)
    

    wäre vom Typ

    void (System::Object ^)
    

    .

    Die entsprechenden CodeStellen sehen so aus:
    Connection.cpp:

    delegate void ConnectionChanged(Object^);
    ref class Connection
    {
    // blabla
    }
    

    Relations.cpp:

    ref class Relations
    {
        void ConnectionChangedEvent(Object^)
        {
            // Noch leer.
        }
    }
    

    Worksheet.cpp:

    public ref class Worksheet : public System::Windows::Forms::PictureBox
    {
    // blabla
        void MouseDownEvent(System::Object^ Sender, System::Windows::Forms::MouseEventArgs^ e)
        {
            // Blabla
    
            // Erstelle eine Neue Connection.
            this->actualConnection = gcnew Connection(clickedInterface);
            this->actualConnection->ConnectionChangedDelegate += gcnew PropSim::ConnectionChanged(&Relations::ConnectionChangedEvent);
    
            // Blabla
        }
    }
    

    Wäre cool wenn mir jemand sagen könnte woran das liegt. Googelei und MSDN-Hilfe waren bislang erfolglos.
    Gracias Amigos y Amigas,
    Matthias.



  • Das dürfte wohl das Problem hier sein (zwei Seiten weiter hier im Forum) 😉

    Delegates AND Windows Forms



  • Das hab ich jetzt vergessen hinzuschreiben.
    In der Klasse Connection steht sogar:

    delegate void ConnectionChanged(Object^);
    ref class Connection
    {
        // blabla
    public:
        ConnectionChanged^ ConnectionChangedDelegate;
        // blabla
    }
    

    [AmKopfKraul]
    Der Delegat ist also bereits istanziiert. Der Fehler kommt trotzdem.
    [/AmKopfKraul]



  • Vielleicht dem (Object^) noch eine Variable mitgeben - also (Object^ irgendwas).



  • Ist ja Blödsinn was ich geschrieben habe, instanziiert wird er ja in der Zeile wo der Fehler auftritt. Also bei dem gcnew in Worksheet.cpp.



  • Hi,
    schreib das mal so.
    Hab auch oft das Semikolon nach der letzten geschweiften Klammer vergessen. 😉

    ref class Relations 
    { 
        void ConnectionChangedEvent(Object^) 
        { 
            // Noch leer. 
        } 
    };
    


  • Jetzt verwirre ich euch mit Lauter fehlern die ich in mein Posting reingebaut habe, die aber nicht in Programm stehen.
    Was ich damit sagen Will:
    Semikolon ist eigentlich vorhanden, und existiert mit dem Fehler in friedlicher koexistenz.



  • Arbeitest Du in WindowsForms?
    Poste doch mal den kompletten Code, dann versuche ich Dir zu helfen.



  • OK. Problem gelöst.
    Ich muß ja ein Handle auf das Objekt dessen Funktion aufgerufen werden soll übergeben:

    this->actualConnection->ConnectionChangedDelegate += gcnew PropSim::ConnectionChanged(this->objectRelations, &Relations::ConnectionChangedEvent);
    

    Sonst weis er (der Compiler) ja nicht welches Relations-Objekt die Methode ausführen soll.
    Trotzdem Danke für alle anstrengungen,
    Matthias.


Anmelden zum Antworten