我需要一个基类的函数指针。这是代码:
class CActionObjectBase
{
...
void AddResultStateErrorMessage( const char* pcMessage , ULONG iResultStateCode);
...
}
CActionObjectCalibration( ): CActionObjectBase()
{
...
m_Calibration = new CCalibration(&CActionObjectBase::AddResultStateErrorMessage);
}
class CCalibration
{
...
CCalibration(void (CActionObjectBase::* AddErrorMessage)(const char*, ULONG ));
...
void (CActionObjectBase::* m_AddErrorMessage)(const char*, ULONG );
}
在函数内部CCalibration发生错误。我尝试像这样调用函数指针:
if(m_AddErrorMessage)
{
...
m_AddErrorMessage("bla bla", RSC_FILE_ERROR);
}
问题是,我无法编译。错误消息说: 错误C2064:表达式不是函数,需要两个参数。
有什么问题?
问候 camelord
答案 0 :(得分:2)
您需要提供一个可以调用成员函数的对象:
CActionObjectBase* pActionObjectBase /* = get pointer from somewhere */ ;
(pActionObjectBase->*m_AddErrorMessage)("bla bla", RSC_FILE_ERROR);
与普通的对象和函数指针不同,指向成员的指针只能通过.*
(对象和引用)或->*
(指向对象的指针)运算符使用适当类型的对象进行引用
答案 1 :(得分:0)
您需要在对象上调用m_AddErrorMessage
,例如:
(something->*m_AddErrorMessage)(...)