求解类成员函数指针传递问题.

YIRIYIQIAN 2012-06-02 06:05:11


#include<iostream>

class B;
class A
{
public:
A(void (B::*ptr_fun)())
{
_ptr_fun = ptr_fun;
}
void fun()
{
_ptr_fun(); ------编译期间错误
}
private:
void (B::*_ptr_fun)();
};

class B
{
public:
void fun()
{
obj = new A(&B::fun);
std::cout << "B::fun()" <<std::endl;
obj->fun();
}
private:
A* obj;
};

void main()
{
B b;
b.fun();
system("pause");
}
...全文
138 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
YIRIYIQIAN 2012-06-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

非静态类成员函数,需要用“类实例取*函数指针”调用。另外你的两个函数互相调用,会将栈压爆,我给你稍微修改了一下。

C/C++ code

#include<iostream>

class B;
class A
{
public:
A(void (B::*ptr_fun)(int a))
{
_ptr_fun = ptr_fun;
}
vo……
[/Quote]

think you
  • 打赏
  • 举报
回复
非静态类成员函数,需要用“类实例取*函数指针”调用。另外你的两个函数互相调用,会将栈压爆,我给你稍微修改了一下。


#include<iostream>

class B;
class A
{
public:
A(void (B::*ptr_fun)(int a))
{
_ptr_fun = ptr_fun;
}
void fun()
{
(((B*)NULL)->*_ptr_fun)(10); // same as ((*(B*)NULL).*_ptr_fun)(10);
}
private:
void (B::*_ptr_fun)(int a);
};

class B
{
public:
void fun(int a)
{
std::cout << "B::fun() " << a <<std::endl;
}
void test()
{
obj = new A(&B::fun);
obj->fun();
delete obj;
}
private:
A* obj;
};

void main()
{
B b;
b.test();
system("pause");
}
YIRIYIQIAN 2012-06-02
  • 打赏
  • 举报
回复

#include<iostream>

class B;
class A
{
public:
A(void (B::*ptr_fun)(int a))
{
_ptr_fun = ptr_fun;
}
void fun()
{
_ptr_fun(10); ------------还是不行
}
private:
void (B::*_ptr_fun)(int a);
};

class B
{
public:
void fun(int a)
{
obj = new A(&B::fun);
std::cout << "B::fun()" <<std::endl;
obj->fun();
}
private:
A* obj;
};

void main()
{
B b;
b.fun(10);
system("pause");
}


error C2064: 项不会计算为接受 1 个参数的函数
YIRIYIQIAN 2012-06-02
  • 打赏
  • 举报
回复
好吧 多写了个括号

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧