指教函数指针问题!!

javatalk 2008-04-08 03:45:04

Class Test
{
public:
typedef void(Test::*func)();

func m_fn;

public:
void func1(){
//do something...
}
void func2(){
//do something...
}
void Setupfn(BOOL bSign){
if(bSign){
m_fn = &Test::func1;
}{
m_fn = &Test::func2;
}
}
void run(){
m_fn();
//or this->*m_fn();
}
}

Test t;
t.Setupfn(TRUE);
t.run();

为什么编译老报错。。。提示:error C2064: 项不会计算为接受 0 个参数的函数
请问出了什么问题?
...全文
63 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
独孤过儿 2008-04-08
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

class Test
{
public:
typedef void(Test::*func)();
func m_fn;
public:
void func1()
{
//do something...
}
void func2()
{
//do something...
}
void Setupfn(bool bSign)
{
if(bSign)
{
m_fn = &Test::func1;
}
else //这里是有个else吧...
{
m_fn = &Test::func2;
}
}

void run()
{
(this->*m_fn)();
//or this->*m_fn();
}
};


int main()
{
Test t;
t.Setupfn(true);
t.run();
return 0;
}

myullian 2008-04-08
  • 打赏
  • 举报
回复
学习
javatalk 2008-04-08
  • 打赏
  • 举报
回复
谢谢楼上改正。将this->*m_fn();改成(this->*m_fn)(); 就编译通过了。。。真郁闷!!!!
Treazy 2008-04-08
  • 打赏
  • 举报
回复

m_fn();
//or this->*m_fn();
改成

(this->*m_fn)();



javatalk 2008-04-08
  • 打赏
  • 举报
回复
不是这个问题,类结尾有分号,只是这里忘了加。若注释掉run()里面的m_fn();程序编译通过。
ttkk_2007 2008-04-08
  • 打赏
  • 举报
回复

class Test //小写class
{
public:
typedef void(Test::*func)();

func m_fn;

public:
void func1(){
//do something...
}
void func2(){
//do something...
}
void Setupfn(bool bSign){
if(bSign){
m_fn = &Test::func1;
}{
m_fn = &Test::func2;
}
}
void run(){
(this->*m_fn)(); //这个地方你用错了
//or this->*m_fn();
}
}; //缺分号
独孤过儿 2008-04-08
  • 打赏
  • 举报
回复
类结尾少了个分号...

64,849

社区成员

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

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