指向类的成员函数的指针无法在类外显式调用

项目场景:

类的成员函数的指针无法在类外显式调用


问题描述:

今天在写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指针,在类的内部调用是可以的。

但是完全不知道为什么。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值