_ATL_ENABLE_PTM_WARNING

更新 : 2007 年 11 月

このマクロは、メンバ関数へのポインタに対して ANSI C++ 標準に準拠する構文を使用するために定義します。このマクロを使用して、標準以外の構文でメンバ関数へのポインタを初期化すると、C4867 コンパイル エラーが生成されます。

#define _ATL_ENABLE_PTM_WARNING

解説

ATL ライブラリおよび MFC ライブラリは、Visual C++ コンパイラの C++ 標準への準拠が強化されたことに伴って変更されました。ANSI C++ 標準に従って、クラス メンバ関数へのポインタの構文には &CMyClass::MyFunc を指定する必要があります。

_ATL_ENABLE_PTM_WARNING が定義されていない場合 (既定)、ATL または MFC は、マクロ マップ (特にメッセージ マップ) の C4867 エラーを無効にして、レガシ コードでのビルドを以前のように継続できるようにします。_ATL_ENABLE_PTM_WARNING を定義する場合、コードは C++ 標準に準拠する必要があります。

ただし、標準以外のフォームが使用されなくなったため、既存のコードを C++ 標準に準拠した構文に移行する必要があります。たとえば、次のようなコードがあります。

BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
   ON_COMMAND(ID_MYCOMMAND, OnMycommand)
END_MESSAGE_MAP()

このコードは、次のように変更する必要があります。

BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
   ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)
END_MESSAGE_MAP()

"&" 文字を追加するマップ マクロの場合は、この文字を再度コードに追加する必要があることに注意してください。

参照

参照

コンパイラの警告 C4867

その他の技術情報

コンパイラ オプションに関するマクロ