Class里的函数指针赋值问题

rickys2080 2013-09-09 08:57:44

#include <iostream>
using namespace std;

class myClass
{
public:
void init();
void (*pfun)();//函数指针
void print();
};
void myClass::print()
{
cout<<"hello"<<endl;
}
void myClass::init()
{
pfun = print;//函数指针赋值报错
}
int main(int argc, char *argv[])
{
myClass s;
s.init();
s.pfun();//函数指针调用
return 0;
}


函数指针赋值报错 error: argument of type `void (myClass::)()' does not match `void (*)()'
...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
max_min_ 2013-09-09
  • 打赏
  • 举报
回复
引用 5 楼 syrchina 的回复:
[quote=引用 4 楼 mougaidong 的回复:] 你一定要将它作为成员,就只能这样了:

#include <iostream>

using namespace std;

class myClass {
 public:
  void init();
  void (myClass::*pfun)();
  void print();
};

void myClass::print() {
  cout<<"hello"<<endl;
}

void myClass::init() {
  pfun = &myClass::print;
}

int main(int argc, char *argv[]) {
  myClass s;
  s.init();
  (s.*(s.pfun))();
}
多谢高人! 我写这个程序是想,在程序运行期间动态改变函数指针,使它注册不同的功能,那么通常的习惯用法是怎样的? 谢谢[/quote] 搞个switch语言阿, 不同的语境执行不同的动态接口好了
rickys2080 2013-09-09
  • 打赏
  • 举报
回复
引用 4 楼 mougaidong 的回复:
你一定要将它作为成员,就只能这样了:

#include <iostream>

using namespace std;

class myClass {
 public:
  void init();
  void (myClass::*pfun)();
  void print();
};

void myClass::print() {
  cout<<"hello"<<endl;
}

void myClass::init() {
  pfun = &myClass::print;
}

int main(int argc, char *argv[]) {
  myClass s;
  s.init();
  (s.*(s.pfun))();
}
多谢高人! 我写这个程序是想,在程序运行期间动态改变函数指针,使它注册不同的功能,那么通常的习惯用法是怎样的? 谢谢
turing-complete 2013-09-09
  • 打赏
  • 举报
回复
你一定要将它作为成员,就只能这样了:

#include <iostream>

using namespace std;

class myClass {
 public:
  void init();
  void (myClass::*pfun)();
  void print();
};

void myClass::print() {
  cout<<"hello"<<endl;
}

void myClass::init() {
  pfun = &myClass::print;
}

int main(int argc, char *argv[]) {
  myClass s;
  s.init();
  (s.*(s.pfun))();
}
rickys2080 2013-09-09
  • 打赏
  • 举报
回复
上面说的赋值会报错,请各位大神指点,这里该怎么用?
rickys2080 2013-09-09
  • 打赏
  • 举报
回复
上面说的赋值会保存,请各位大神指点,这里该怎么用?
turing-complete 2013-09-09
  • 打赏
  • 举报
回复
类型对不上啊,要这么声明
 void (myClass::*pfun)();//函数指针

64,654

社区成员

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

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