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