ページ 11

WebBrowserクラス

Posted: 2016年6月04日(土) 21:26
by fsdfadsf4te
WebBrowserクラスを継承したクラスを作成していて、
OnDocumentCompletedメソッドをオーバラーライドしたいのですが、
コンパイルエラーとなります。

コンパイル警告/エラー無しで正しく継承する具体的なコーディング内容を教えて下さい。

■環境
Visual Studio 2012
C++ CLI

■ソース

コード:

public ref class ClassHTTPAuto : WebBrowser{

virtual void OnDocumentCompleted(WebBrowserDocumentCompletedEventArgs e) override = WebBrowser::OnDocumentCompleted{//★
	}

};


■コンパイルエラー内容 ★の箇所
'System::Windows::Forms::WebBrowser::OnDocumentCompleted' : 明示的なオーバーライドの署名に一致するメンバーはありません。
'ClassHTTPAuto::OnDocumentCompleted' : 関数は 'System::Windows::Forms::WebBrowser::OnDocumentCompleted' をオーバーライドしません
'override' : オーバーライド指定子の使用法が不適切です。'ClassHTTPAuto::OnDocumentCompleted' は基本 ref クラス メソッドと一致しません

Re: WebBrowserクラス

Posted: 2016年6月05日(日) 01:04
by YuO
まず,MSDNをちゃんと読みましょう。
WebBrowser.OnDocumentCompleted メソッド (WebBrowserDocumentCompletedEventArgs) (System.Windows.Forms)

コード:

protected:
virtual void OnDocumentCompleted(
	WebBrowserDocumentCompletedEventArgs^ e
)
System::Windows::Forms::WebBrowser::OnDocumentCompletedの引数の型は,
WebBrowserDocumentCompletedEventArgs^
です。
WebBrowserDocumentCompletedEventArgs
ではありません。


次に,overrideの直後に=が来るのは,文法上= 0か= defaultか= deleteです。
= WebBrowser::OnDocumentCompletedが来ることはあり得ませんし,上記のどの場合も,複文が連なることはありません。
# = deleteは実質的に書かないでしょう (基底クラスで= deleteされた関数のみoverrideできる上に,それを= deleteされていない関数でoverrideできない。spec 10.3/para.16)。