0

我有一个 c++ 程序,我正在尝试从 VS98 移植到 VS2003(增量步骤)。贯穿始终的一个错误是“错误 2275”

例如: k:\RR\chart\chartdlg.cpp(2025): error 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();
            }
        }
    }
}

我尝试根据 Microsoft页面处理它:但这只是产生了一组其他问题(星号之间的注释代码)。请注意,我还注释掉了以下行:

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 回答