调用指向成员函数的指针时出错

时间:2019-06-13 13:08:50

标签: c++ member-function-pointers

我创建了一个具有成员函数和结构的类,该结构具有指向成员函数的函数指针作为属性。我已经用成员函数的地址初始化了结构。然后,我在主函数中为该类创建了一个对象,并通过“(-> *)”调用了指向成员函数的指针。但是它失败并显示一条错误,指出“错误:未在此范围内声明'正确的操作数'”

//Header
#ifndef A_H
#define A_H

class A
{
    public:
    typedef struct
    {
        void (A::*fptr) ();
    }test;

    test t;

    public:
        A();
        virtual ~A();
        void display();
    protected:

    private:
};
#endif // A_H


//A.cpp
#include "A.h"
#include <iostream>

using namespace std;

A::A()
{
    t.fptr = &A::display;
}

A::~A()
{
    //dtor
}

void A::display()
{
    cout << "A::Display function invoked" << endl;
}

//Main

#include <iostream>
#include "A.h"

using namespace std;

int main()
{
    cout << "Pointer to Member Function!" << endl;

    A *obj = new A;

    (obj->*t.fptr)();

    return 0;
}
  

|| ===生成:在fptr中调试(编译器:GNU GCC编译器)=== |在   函数'int main()':|错误:在此范围内未声明't'   || ===构建失败:1个错误,0个警告(0分钟,1个   秒)=== |

1 个答案:

答案 0 :(得分:1)

指向成员函数的指针总是很难正确。但是你快到了。首先,将调用更改为

(obj->*obj->t.fptr)();

,然后再想一想,您是否真的需要使用指向指向您所指向的同一类的结构中嵌套的成员的普通指针,或者是否可以美化某些类型别名或其他方法上面的怪物:)