2010-03-22 114 views
0

我需要一个基类的函数指针。以下是代码:功能基类的指针

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

你需要一个对象上调用m_AddErrorMessage,是这样的:

(something->*m_AddErrorMessage)(...) 
+0

如果他使用'm_AddErrorMessage'不合格,那么这可能是'CCalibration',它不是'CActionObjectBase'。编辑:你已经修复了' - > *'/' - >' – 2010-03-22 10:35:31

+0

@Charles你说得对,我将'this->'改为'something->'。 – 2010-03-22 10:41:09

+0

我真的需要将CActionObjectBase的对象传递给CCalibration吗?我试图通过使用函数指针作为参数来避免这种情况。然后我可以使用一个从CActionObjectBase派生的对象调用CCalibration函数,调用函数,就像我试图在上面显示的那样: m_Calibration = new CCalibration(&CActionObjectBase :: AddResultStateErrorMessage); – camelord 2010-03-22 10:44:50

2

您需要提供在其上调用成员函数的对象:

CActionObjectBase* pActionObjectBase /* = get pointer from somewhere */ ; 

(pActionObjectBase->*m_AddErrorMessage)("bla bla", RSC_FILE_ERROR); 

与普通的对象和函数指针不同,指向成员的指针只能通过0来使用适当类型的对象来引用(用于对象和引用)或->*(用于指向对象的)运算符。