有人可以帮我辨别我哪里错了吗?我正在尝试使用函数指针到基类函数
错误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();
}
答案 0 :(得分:3)
在调用指向成员函数的指针时,必须使用。*或 - &gt; *
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;
}
};
答案 1 :(得分:2)
指向成员的指针必须始终与对象的指针/引用结合使用。你可能想写这个:
(this->*app)();
答案 2 :(得分:1)
http://msdn.microsoft.com/en-us/library/k8336763.aspx
二元运算符 - &gt; *组合了它的第一个操作数,它必须是a 指向类类型对象的指针,带有第二个操作数,即 必须是指向成员的指针类型。
所以这将解决你的问题:
class C : public B {
public:
int(C::*app)();
int c() {
app = &C::a;
printf("%s", typeid(app).name());
(this->*app)();
printf("C");
return 0;
}
};
答案 3 :(得分:0)
我有一个预感,你真正试图解决的问题是“如何从派生类中调用基类函数?”如果是这种情况,答案是:
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;
}