我已将我的应用程序从32位移植到64位平台,并遇到了各种构建问题。我解决了几乎所有事情,但我遇到了一个我无法弄清楚的错误。
有人可以建议解决这个错误吗?
“错误61错误C2555:'CICEVisionDlg :: DoModal':覆盖虚拟 函数返回类型不同且不协变 'CDialog的:的DoModal'
DoModal
覆盖的代码:
int CICEVisionDlg::DoModal()
{
int nRet;
m_bPopup = TRUE;
CEXTDLLState EXTDLLState(m_hResDllModule);
nRet = CDialog::DoModal();
m_bPopup = FALSE;
return nRet;
}
答案 0 :(得分:10)
DoModal
的返回值为INT_PTR
,在32位上为int
,在64位平台上为__int64
。将覆盖函数的返回值更改为INT_PTR
,它将在两者上进行编译。
答案 1 :(得分:4)
覆盖虚函数时,必须返回正确的类型,其中“correct”取决于基类的返回类型。
“Correct”表示完全相同的类型,或者仅指向指针和引用返回类型,“更具体”类型。如果基类Base
中的函数返回X*
,则派生类可以返回不同的类型Y*
,前提是Y
是X
的派生类
您的问题是派生类DoModal
中的CICEVisionDlg
函数的覆盖与它覆盖的CDialog
中函数的返回类型不匹配。是否假定是协变的还是取决于返回类型 - 如果它不应该是协变的那么你可以忽略它,并且错误意味着“你的函数返回错误的类型!”< / p>