2016-12-27 81 views
0

私は、次のクラス持っている:あなたは、私は追加のクラスに私の方法をexternにしたい見ることができるようにのVisual C++ 2010のエラー:LNK2020未解決のトークン

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(); 
    } 
}; 

を。 エラー:

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

何が問題なのですか。

+0

あなたが 'をForm1 :: label1_Click'の定義を提供したり、それが純粋仮想宣言する必要があります。 –

+0

私は、クラスのForm1 [コード] 仮想システム::ボイドlabel1_Click(システム::オブジェクト^送信者、システム:: EventArgsの^ E)= 0で純粋仮想しようとしています。 [/ code] 多くのエラーがあります。 [リンク] http://stackoverflow.com/questions/2652198/difference-between-a-virtual-function-and-a-pure-virtual-function [/リンク] – Zomfire

+0

1> C:この溶液を用いてI'am :\ユーザー\ Visual Studioの2010 \ミハルの\ドキュメントプロジェクト\ \ milionerzy \ milionerzy \ Form1.h(505): 'milionerzy :: Form1の:: label1_Click' 1>「のボイドmilionerzy ::をForm1 :: label2_Click(の宣言を参照してくださいSystem :: Object ^、System :: EventArgs ^) ':抽象的なです – Zomfire

答えて

0

あなたは、おそらくのForm1からlabel1_Clickを削除する必要があります。あなたがそれを純粋な仮想にすることを考えているので、label1のクリックイベントを扱うことには何の意味もありません。あなたができる時だけそれを処理してください。

あなたはハンドラにおける多型は次のように別の純粋仮想関数を宣言する場合:

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

あなたの返事をありがとう。しかし、この場合には、私はこれがクラスに挿入しなければならない設計 でそれを見るために最初のクラスに各ラベル(または他の要素)のすべての設定を配置する必要があり、その子の(公共システム:: Windowsの::フォーム::フォーム)。私はそれを望んでいない。その場合 – Zomfire

+0

、すべての抽象プロパティを削除し、Form1でLABEL1クリックイベントを処理し、(純粋ではなく)仮想OnLabelClickを呼び出します。したがって、Form1 :: OnLabelClickは何もせず、Handlersクラスでオーバーライドします。 – GeorgeT

関連する問題