gpt4 book ai didi

c++ - 解决 VS 2003 中的 C++ 指向成员的错误

转载 作者:行者123 更新时间:2023-11-28 07:27:52 24 4
gpt4 key购买 nike

我有一个 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 page 处理它: 但这只是产生了一系列其他问题(星号之间的注释代码)。请注意,我还注释掉了以下行:

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);

关于如何处理指向成员的指针问题有什么想法吗?

最佳答案

因为你有:

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;

关于c++ - 解决 VS 2003 中的 C++ 指向成员的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18388077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com