引数がBOOL型とLPCTSTR型なのに「オーバーロード関数があいまいです。 」とされる。

[戻る]
lj 2009/09/03(木) 16:04:12
初めまして。
WindowsXP(SP2適用) VC++2005 MFCで作成しています。

二つの自作関数があり、
それぞれ

void Format(BOOL b, LPCTSTR lpFormat, ...);
void Format(LPCTSTR lpFormat, ...);
です。

後者を、
Format("メッセージ:%s", str);
と呼び出しそうとすると、
「'Format' : 2 のオーバーロード関数があいまいです。(新しい機能 ; ヘルプを参照)」
とコンパイルエラーになります。

Format((LPCTSTR)"メッセージ:%s", str);
などとしてみましたが、駄目でした。

ちなみに
Format((BOOL)"メッセージ:%s", str);
とすると、
「warning C4311: '型キャスト' : ポインタを 'const char *' から 'BOOL' へ切り詰め
ます。」
と出て一応ビルドはされます。

BOOLとLPCTSTRで型が曖昧だとは思わないのですが、どうなのでしょう。

επιστημη [E-Mail] [HomePage] 2009/09/03(木) 16:20:49
Format(_T("メッセージ:%s"), str);
だとどうなります?

lj 2009/09/03(木) 16:41:24
επιστημη様

有難うございます。
試してみましたが、矢張り同じエラーが出てしまいます。

脱落していましたが、エラーコードは「error C2666」です。

宜しくお願い致します。

Blue 2009/09/03(木) 16:53:20
本当に提示されている内容ですべてでしょうか?
VS2005でMFCのダイアログアプリで下記のコードを記述しましたが問題ないようですけど。

void Format(LPCTSTR lpFormat, ...) { AfxMessageBox(_T("1")); }
void Format(BOOL b, LPCTSTR lpFormat, ...) { AfxMessageBox(_T("2")); }

void CHogeDlg::OnBnClickedButton1()
{
    // TODO: ここにコントロール通知ハンドラ コードを追加します。
    CString str;
    Format(_T("メッセージ:%s"), str);
    Format(TRUE, _T("メッセージ:%s"), str);
}

lj 2009/09/03(木) 17:05:10
[[解決]]
済みません、自己解決致しました。

void Format(BOOL b, LPCTSTR lpFormat, ...);
void Format(LPCTSTR lpFormat, ...);
の他に、更に
void Format(bool b, LPCTSTR lpFormat, ...);
という関数が存在していました。
これと、
void Format(LPCTSTR lpFormat, ...);
が曖昧だとの事のようです。

コンパイルの際の出力で、
「'void Format(BOOL,LPCTSTR,...)' の可能性があります。」
と「BOOL」になっていたので、「bool」のものに引っ掛かっていると考えませんでした。

お騒がせ致しました。
επιστημη様
Blue様
有難うございました。

古いスレッドには追加発言できません。