0

VS98 から VS2003 に移植しようとしている C++ プログラムがあります (増分ステップ)。全体で発生するエラーの 1 つは、「エラー 2275」です。

例: k:\RR\chart\chartdlg.cpp(2025): エラー C2475: 'CRrDoc::cFldFilter': メンバーへのポインターを形成するには、アドレス演算子 ('&') を明示的に使用する必要があります。修飾名

問題のあるコードを以下に示します。

void CDataPage::OnBtnLabelField()
{
    FLDID       fid ;
    LPMFFIELD   f ;
    CRrApp  *pApp = (CRrApp *)AfxGetApp();
    CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
    CRrDoc  *pDoc = (CRrDoc *)pFrame->GetActiveDocument();
    CSelectFieldDlg dlg;

    //**************************************************
    //BOOL CRrDoc::*zcFldFilter = &CRrDoc::cFldFilter;

    //dlg.ck = CRrDoc->*zcFldFilter;
    //**************************************************

    dlg.ck = pDoc->cFldFilter ;

    dlg.TitleTextID = IDS_2676;
    fid = (FLDID)dlg.DoModal();

    if (fid != NOID)
    {
        f = pDoc->m_pComposite->mfbyndx(fid);

        // find index
        int i, iCount;
        iCount = m_lboxLabel.GetCount();
        for (i = 0; i < iCount; i++)
        {
            if(fid == m_lboxLabel.GetItemData(i))
            {
                m_lboxLabel.SetCurSel(i);
                OnSelchangeComboLabel();
            }
        }
    }
}

私はマイクロソフトのページに従ってそれを処理しようとしました:しかし、それは他の一連の問題を生成しました(アスタリスク間のコメントされたコード)。次の行もコメントアウトしたことに注意してください。

dlg.ck = pDoc->cFldFilter

残念ながら、これにより新しいエラーが発生します: k:\RR\chart\chartdlg.cpp(2022): error C2440: 'initializing' : cannot convert from 'BOOL (__cdecl )(LPMFFIELD)' to 'BOOL CRrDoc:: '

.H ファイルの定義は次のようになります。

public:
        static BOOL cFldFilter(LPMFFIELD f);

メンバーへのポインターの問題を処理する方法はありますか?

4

1 に答える 1

1

あなたが持っているので:

static BOOL CRrDoc::cFldFilter(LPMFFIELD f);

その型はメンバー変数ではなく関数です:

//BOOL CRrDoc::*zcFldFilter = &CRrDoc::cFldFilter;    // doesn't work
BOOL (*zcFldFilter)(LPMFFIELD) = &CRrDoc::cFldFilter; // works

dlg.ck は正しいタイプなので、次のようにする必要があります。

dlg.ck = &CRrDoc::cFldFilter;
于 2013-08-22T18:46:35.670 に答える