C++ 継承でのエラー C2660

投稿日 by Iwao

元々一つのクラスとしていたが,それを分割した時のエラー対応のメモ.

bool	D_Image::Draw	(HDC hdc,const RECT rect)
{
	if (GetDocPath().empty())		{	return	false ;		}
	{
		if (::Path_GetExtLow(GetDocPath()) == _T("emf")) {
			return	E_MetaF::Play(hdc,GetDocPath().c_str(),rect) ;
			}
		}
	if (HBMP == NULL && HICN == NULL) {
	//	...
		}
	if	(HBMP != NULL)	{	return	::Bitmap_Draw(hdc,rect,HBMP) ;	}
	else if	(HICN != NULL)	{	return	::Icon_Draw  (hdc,rect,HICN) ;	}
	return	false ;
	}
bool	D_Image::Draw	(HWND hwnd)
{
	if (GetDocPath().empty())		{	return	false ;		}
	if (hwnd == NULL)			{	return	false ;		}
	RECT	rect = {	0	} ;
	::GetClientRect(hwnd,&rect) ;
	bool	result = false ;
	{
		HDC		hdc  = ::GetDC(hwnd) ;
		result = Draw(hdc,rect) ;
		::ReleaseDC(hwnd,hdc) ;
		}
	return	result ;
	}

この E_MetaF::Play の部分を分離.

class	D_I_E	:	public		D_Image		{
public:
	virtual	bool	Draw		(HDC  hdc,const RECT rect)	{
		if (GetDocPath().empty())	{	return	false ;		}
		{
			if (::Path_GetExtLow(GetDocPath()) == _T("emf")) {
				return	E_MetaF::Play(hdc,GetDocPath().c_str(),rect) ;
				}
			}
		return	D_Image::Draw(hdc,rect) ;
		}
	} ;

この状態で変数の宣言を D_I_E として呼び出している所でエラー.

		Sel_doc.Draw(this->GetSafeHwnd()) ;
	//	Sel_doc.D_Image::Draw(this->GetSafeHwnd()) ;
--------------------構成: T_DImage - Win32 Debug--------------------
コンパイル中...
T_DI_Dlg.cpp
\\TestXP\Documents\Develop\VC_Test\Test\etc\EnhMetaF\T_DImage\T_DI_Dlg.cpp(186) : error C2660: 'Draw' : 関数が不正な 1 個の実引数をともなって呼び出されました。
cl.exe の実行エラー
T_DImage.exe - エラー 1、警告 0

下の様に修飾すれば通る.
また,D_I_E の関数として次のものを用意すれば D_Image:: の様に修飾しなくても大丈夫.

	virtual	bool	Draw		(HWND hwnd)	{
		return	D_Image::Draw(hwnd) ;
		}

変更の内容にもよるが,
なるべく既存のコード(呼び出している部分)の変更が最小限となる方が良いか?
C++ 継承でのエラー

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ



コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください