2016-12-27 4 views
0

Ich habe folgende Klassen bekam:Visual C++ 2010 Fehler: LNK2020 Ungelöste Token

public ref class Form1 : public System::Windows::Forms::Form 
{ 
//[...] 
protected: 
System::Void label1_Click(System::Object^ sender, System::EventArgs^ e); 
}; 

public ref class Functions : public Form1 
{ 
protected: 
void Example() {} 
}; 

public ref class Handlers : public Functions 
{ 
private: 
    System::Void label1_Click(System::Object^ sender, System::EventArgs^ e) 
    { 
    Example(); 
    } 
}; 

Wie man sehen kann ich meine Methode in zusätzliche Klasse extern möchten. Der Fehler ist:

1>Milionerzy.obj : error LNK2020: unresolved token (06000004) Milionerzy.Form1::label1_Click

Was ist falsch?

+0

Sie brauchen eine Definition liefern für 'Form1 :: label1_Click' oder erklären es rein virtuell. –

+0

Ich versuche rein virtuell in Klasse Form1 [Code] virtuelles System :: Void label1_Click (System :: Object^Absender, System :: EventArgs^e) = 0; [/ code] Und ich habe viele Fehler. Ich verwende diese Lösung: [link] http://stackoverflow.com/questions/2652198/difference-between-a-virtual-function-and-a-pure-virtual-function [/ link] – Zomfire

+0

1> c : \ Benutzer \ Michal \ Dokumente \ Visual Studio 2010 \ Projekte \ Milionerzy \ Milionerzy \ Form1.h (505): siehe Erklärung von 'Milionerzy :: Form1 :: Label1_Click' 1> 'void Milionerzy :: Form1 :: label2_Click (System :: Object ^, System :: EventArgs ^) ': ist abstrakt – Zomfire

Antwort

0

Sie sollten label1_Click wahrscheinlich von Form1 entfernen. Es macht keinen Sinn, das click-Ereignis von label1 überhaupt zu handhaben, da Sie darüber nachdenken, es rein virtuell zu machen. Behandeln Sie es einfach, wenn Sie dazu in der Lage sind.

Wenn Sie Polymorphismus in der Prozedur eine andere rein virtuelle Funktion wie folgt erklären:

public ref class Form1 abstract: public System::Windows::Forms::Form 
{ 
//[...] 
protected: 
    virtual void OnLabel1Click()=0; 
}; 

public ref class Functions : public Form1 
{ 
protected: 
    void Example() 
    { 
    } 
    virtual void OnLabel1Click() override 
    { 
     Example(); 
    } 
}; 

public ref class Handlers : public Functions 
{ 
private: 
    System::Void label1_Click(System::Object^ sender, System::EventArgs^ e) 
    { 
     OnLabel1Click(); 
    } 
}; 
+0

Danke für Ihre Antwort. Aber in diesem Fall muss ich alle Einstellungen jedes Labels (oder anderer Elemente) in die erste Klasse setzen, um es im Design zu sehen. Dies muss in die Klasse eingefügt werden, die von (public System :: Windows :: Forms :: Form) untergeordnet ist. Ich will es nicht. – Zomfire

+0

In diesem Fall entfernen Sie alle abstrakten Eigenschaften und behandeln das click-Ereignis label1 in Form1 und rufen das virtuelle (aber nicht reine) OnLabelClick auf. Daher wird Form1 :: OnLabelClick nichts tun und Sie werden es in der Klasse Handler überschreiben. – GeorgeT

Verwandte Themen