J'ai besoin d'un pointeur de fonction d'une classe de base. Voici le code:Fonction Pointeur de la classe de base
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);
}
L'interne CCalibration dans une fonction provoque l'erreur. J'essaie d'appeler le pointeur de fonction comme ceci:
if(m_AddErrorMessage)
{
...
m_AddErrorMessage("bla bla", RSC_FILE_ERROR);
}
Le problème est, que je ne peux pas compiler. Le message d'erreur indique quelque chose comme: erreur C2064: Expression n'est pas une fonction, qui prend deux arguments.
Qu'est-ce qui ne va pas?
concernant camelord
S'il utilise 'm_AddErrorMessage' non qualifié, il s'agit probablement d'un' CCalibration' qui n'est pas un 'CActionObjectBase'. edit: vous avez corrigé '-> *'/'->' –
@Charles Vous avez raison, j'ai changé 'this- >' en' quelque chose- >' à la place. –
Ai-je vraiment besoin de passer un objet de CActionObjectBase à CCalibration? J'ai essayé d'éviter cela en utilisant un pointeur de fonction comme paramètre. Ensuite, je peux appeler la fonction CCalibration avec un objet, dérivé de CActionObjectBase, en appelant la fonction comme j'ai essayé de montrer ci-dessus: m_Calibration = new CCalibration (& CActionObjectBase :: AddResultStateErrorMessage); – camelord