指向基类错误成员函数的指针[关闭]

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-&gt;*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;

【讨论】:

以上是关于指向基类错误成员函数的指针[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

获取指向基类受保护成员函数的函数指针

指向基类中成员函数的指针数组

为啥指向基类的派生类指针可以调用派生类成员函数? [复制]

在 C++ 中将指向基类的指针传递给派生类的成员函数

为啥我可以通过指向派生对象的基类指针访问派生私有成员函数?

向下转换指向成员函数的指针