C++ 通过VC+中的类A函数指针调用类成员函数(类B)+;
让我通过一个例子(使用VS2013的VC++代码)来解释我的问题 在这个代码段的最后一行 abcObj1->fp();//编译错误 我得到编译错误 错误C2064:项不计算为具有0个参数的函数 另外,如果我将鼠标悬停在“abcObj1->fp()”上,会出现一个红色错误 表观调用括号前面的表达式必须具有 (指向-)函数类型的指针 在这里,我可以调用函数“abcObj1->outpp();这在任何课程之外。 因此,我知道出现此错误的原因是,“abcObj1->fp();”中的函数地址属于类成员函数,即Dllclas类的“dllFunc()” 我还提到了链接 但我无法解决编译错误 我可以获得代码示例的帮助吗?C++ 通过VC+中的类A函数指针调用类成员函数(类B)+;,c++,pointers,visual-c++,function-pointers,member-function-pointers,C++,Pointers,Visual C++,Function Pointers,Member Function Pointers,让我通过一个例子(使用VS2013的VC++代码)来解释我的问题 在这个代码段的最后一行 abcObj1->fp();//编译错误 我得到编译错误 错误C2064:项不计算为具有0个参数的函数 另外,如果我将鼠标悬停在“abcObj1->fp()”上,会出现一个红色错误 表观调用括号前面的表达式必须具有 (指向-)函数类型的指针 在这里,我可以调用函数“abcObj1->outpp();这在任何课程之外。 因此,我知道出现此错误的原因是,“abcObj1->fp();”中的函数地址属于类成员函数
提前感谢。第一个错误可以通过删除括号来修复:
fp = &Dllclas::dllFunc; // This will compile
第二个问题更难解决:回想一下,为了调用成员函数,您需要两件事:
- 指向函数的指针,以及
- 对其调用函数的对象
Dllclas
类型的“目标”对象:
Dllclas target;
(target.*abcObj1->fp)();
这里的语法有点疯狂-*
将通过abcObj1->fp
获得的函数指针应用于调用的目标,即Dllclas
类型的对象。如果有指向目标的指针而不是目标本身,请使用->*
运算符:
Dllclas *targetPtr;
(targetPtr->*abcObj1->fp)();
如果
x
是指针,则调用成员函数指针f
的语法如下
(x->*f)();
由于成员指针的名称(在\u tmain
中)是abcObj->fp
,因此需要使用
(abcObj->*(abcObj->fp))();
您可以通过向Abc
添加另一个成员来简化,如
void callFP()
{
(*fp)();
}
我找不到
FP
成员。你是说FP
?是的,它是“FP”而不是“FP”(打字错误),我很抱歉。刚刚更正了。谢谢。fp
是指向Dllclas
成员的指针。您需要一个Dllclas
实例来调用该成员,就像您不能在没有Dllclas
实例的情况下直接调用dllFunc
一样。
void callFP()
{
(*fp)();
}