我创建了一个带有成员函数和结构的类,该结构具有指向成员函数的函数指针作为属性。我已经使用成员函数的地址初始化了结构。然后我在 main 函数中为该类创建了一个对象,并通过"(->*("调用指向成员函数的指针。但是它失败了,并出现一个错误,指出"错误:在此范围内未声明'正确的操作数'">
//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 个 秒( ===|
指向成员函数的指针总是很难正确。但你快到了。首先,将调用更改为
(obj->*obj->t.fptr)();
然后再想一想,你是否真的需要使用普通指针来指向嵌套在你所指向的同一类的结构中的成员,或者某些类型别名或其他方法是否可以美化上述怪物:)