项目场景:
类的成员函数的指针无法在类外显式调用
问题描述:
今天在写C++程序的时候遇到了一个很奇怪的问题,完成没有办法解释,也就是类的成员函数的指针无法在类外显式调用。
有点绕口,代码如下:
类的头文件 node.h
#include <stdio.h>
#include <iostream>
class node;
typedef double (node::*pf)(double x);
class node
{
public:
node();
~node();
double func1(double x);
pf p;
double fp(double x);
private:
};
类的源文件 node.cpp
#include "node.h"
node::node()
{
p = &node::func1;
}
node::~node()
{
}
double node::func1(double x)
{
std::cout << "func1:" << x;
return 1;
}
double node::fp(double x)
{
return (this->*p)(x);
}
调用的主函数文件 main.cpp
#include "node.h"
int main()
{
node A;
double x = 1.0;
A.p(x);//error1
A.*p(x);//error2
*(A.p)(x);//error3
A.fp(x);//correct;
return 1;
}
原因分析:
目前没有找到原因。
定义了一个成员函数指针,指向类的成员函数,但是在类外部的普通函数中无法通过该指针调用类的成员函数,以上三种调用方式都是编译未通过。
解决方案:
采用第四种编译方式,在类的成员函数指针外面套一层壳,通过类的成员函数作为接口函数,采用this指针,在类的内部调用是可以的。
但是完全不知道为什么。