指向基类错误成员函数的指针[关闭]
Posted
技术标签:
【中文标题】指向基类错误成员函数的指针[关闭]【英文标题】:Pointer to member function of base class error [closed] 【发布时间】:2013-04-04 07:03:01 【问题描述】:有人可以帮我确定我哪里出错了吗?我正在尝试使用指向基类函数的函数指针
错误 C2064:术语不计算为在第 30 行上采用 0 个参数的函数,即 *(app)()
#include<stdio.h>
#include<conio.h>
#include<stdarg.h>
#include<typeinfo>
using namespace std;
class A
public:
int a()
printf("A");
return 0;
;
class B : public A
public:
int b()
printf("B");
return 0;
;
class C : public B
public:
int(C::*app)();
int c()
app =&C::a;
printf("%s",typeid(app).name());
*(app)();
printf("C");
return 0;
;
int main()
C *obj = new C();
obj->c();
getch();
【问题讨论】:
试试(this->*app)();
为什么要使用指向基类函数的指针?你有什么特别的原因不能打电话给A::a();
吗?
@WhozCraig 非常感谢!!明白了
@maditya 只是使用这个程序来弄清一些概念
【参考方案1】:
在调用成员函数的指针时必须使用 .* 或 ->*
class C : public B
public:
int(C::*app)();
int c()
app =&C::a;
printf("%s",typeid(app).name());
(this->*app)(); // use ->* operator within ()
printf("C");
return 0;
;
【讨论】:
【参考方案2】:指向成员的指针必须始终与指向对象的指针/引用结合使用。您可能打算这样写:
(this->*app)();
【讨论】:
非常感谢!它有效【参考方案3】:http://msdn.microsoft.com/en-us/library/k8336763.aspx
二元运算符 –>* 组合它的第一个操作数,它必须是 指向类类型对象的指针,带有第二个操作数,它 必须是指向成员的类型。
所以这会解决你的问题:
class C : public B
public:
int(C::*app)();
int c()
app = &C::a;
printf("%s", typeid(app).name());
(this->*app)();
printf("C");
return 0;
;
【讨论】:
对不起,当我搜索并发布答案时,其他人已经比我快了。我必须知道我在 *** 的世界里!【参考方案4】:我有一种预感,您真正想要解决的问题是“如何从派生类调用基类函数?”如果是这样的话,答案是:
int c()
app =&C::a;
printf("%s",typeid(app).name());
A::a(); //A:: scopes the function that's being called
printf("C");
return 0;
或
int c()
app =&C::a;
printf("%s",typeid(app).name());
this->a();
printf("C");
return 0;
【讨论】:
以上是关于指向基类错误成员函数的指针[关闭]的主要内容,如果未能解决你的问题,请参考以下文章