让我通过一个示例(使用VS2013的VC++代码)来解释我的问题。通过VC++中的类A函数指针调用类成员函数(类B)
void Imhere(int num)
{
printf_s("\n Hello World printed %d\n",num);
}
class Abc;
class Dllclas
{
public:
void dllFunc()
{
printf_s("\n Heelo this is DLl func\n");
}
};
void outsideFunc()
{
printf_s("\n Heelo this is outside func\n");
}
typedef void(*outsideFP)();
typedef void (Dllclas::*funcFP)();
class Abc
{
public:
funcFP fp;
outsideFP outFp;
int a;
void assignOUTFp()
{
outFp = &outsideFunc;
}
void assignFP()
{
fp = &(Dllclas::dllFunc);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Abc* abcObj1 = new Abc();
abcObj1->a = 7;
abcObj1->assignOUTFp();
abcObj1->outFp(); // THIS FUNCTION CALL WORKS PERFECTLY FINE.
abcObj1->assignFP();
abcObj1->fp(); // COMPILATION ERROR.
在该代码段,在最后一行
abcObj1-> FP(); //编译错误。
我收到编译错误。
错误C2064:术语不计算为服用0参数
另外,如果我悬停我的鼠标在“abcObj1-> FP()”,我得到一个红色的错误读取功能“前述显而易见呼叫的括号
表达式必须具有 (指针TO-)功能类型
在这里,我'能够调用函数“abcObj1-> outFp();这是在任何阶级之外。 因此,我知道我得到这个错误的原因是因为,函数地址出现在“abcObj1-> fp();”属于Dllclas类中的一个成员函数,即“dllFunc()。
我也refered的链接 link但我无法解析编译错误。
我能请得到与代码示例帮助? 预先感谢
我找不到'FP'成员。你的意思是'fp'? – dasblinkenlight
是的,这是“fp”而不是“FP”(错字),我很抱歉。现在纠正它。谢谢。 – codeLover
'fp'是'Dllclas'成员的指针。你需要一个'Dllclas'的实例来调用这个成员 - 就像你不能直接调用'dllFunc'而没有'Dllclas'实例一样。 –