代码描述了两个实现回调函数的类,该函数必须是在模板中传递的类参数中的成员函数。 在代码下方,我附上了相关的错误信息。
A.H
template <class CLASSNAME>
class a
{
public:
typedef void (CLASSNAME::*myFunction)();
a(CLASSNAME& myObject, myFunction callback) :
m_myObject(myObject)
{
m_myFuntion = callback;
}
void update()
{
(m_myObject).*(m_myFuntion);
}
myFunction m_myFuntion;
CLASSNAME& m_myObject;
};
dummy.h
#include <stdio.h>
class dummy
{
public:
dummy()
{
var = 14;
}
void func()
{
printf("func!!");
}
int var;
};
的main.cpp
#include <cstdlib>
#include "a.h"
#include "dummy.h"
void main()
{
dummy dum;
a<dummy> avar(dum, &(dummy::func));
avar.update();
system("pause");
}
我正在尝试实现回调函数,并收到以下错误消息:
C2298 missing call to bound pointer to member function
问题是什么?
答案 0 :(得分:6)
你有很多括号,他们不在正确的地方。调用指向成员函数的函数的正确语法是:
void update()
{
(m_myObject.*m_myFuntion)();
}
答案 1 :(得分:2)
您在错误的地方使用括号:
此:
a<dummy> avar(dum, &(dummy::func));
应该是这样的:
a<dummy> avar(dum, &dummy::func);
而且:
(m_myObject).*(m_myFuntion);
应该是:
(m_myObject.*m_myFuntion)();