CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

非静态成员函数指针能做其他函数的参数吗

楼主jet8(jet8)2006-03-11 10:19:51 在 C/C++ / C++ 语言 提问

用g++和vc编译都不行,在调用g()时将x::f强制类型转换也不行,但在声明x::f()时加上static就可以。这是为什么,还有其他解决的方法吗?源代码如下:  
   
  #include   <iostream>  
  using   namespace   std;  
   
  class   x{  
      public:  
      void   f();  
  };  
   
  void   x::f()  
  {  
      cout   <<   "hello"   <<   endl;  
  }  
   
  void   g(void(*p)())  
  {  
      p();  
  }  
   
  int   main()  
  {  
      x   x1;  
       
      g(x1.f);<--调用不允许  
      return   0;  
  }  
  问题点数:20、回复次数:6Top

1 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2006-03-11 11:16:23 得分 10

#include   <iostream>  
  using   namespace   std;  
   
  class   x  
  {  
      public:  
      void   f();  
  };  
   
  void   x::f()  
  {  
      cout   <<   "hello"   <<   endl;  
  }  
   
  x   x1;  
   
  void   g(   void   (x::*p)()   )  
  {  
        (x1.*p)();  
  }  
   
  int   main()  
  {  
      g(&x::f);  
      system("pause");  
      return   0;  
  }  
   
  Top

2 楼SEUU(三枝花)回复于 2006-03-11 11:24:29 得分 0

不太清楚,可能静态的,全局函数有分配了,地址确定才可以调用吧.  
   
  还有,我是来得分,我只要星星.Top

3 楼howyougen(夫孝,德之本也,教之所由生也)回复于 2006-03-11 15:39:59 得分 5

哪有这么用的,  
  非静态函数3个务必  
  1。定义必须有类  
  2。赋值必须有类  
  3。调用必须通过对象  
  Top

4 楼discory(discory)回复于 2006-03-11 16:38:03 得分 0

那楼主的程序不满足哪一个条件?Top

5 楼ugg(逸学堂(exuetang.net))回复于 2006-03-11 16:50:56 得分 5

其实lz定义的是个回掉(callback)函数,  
  类内函数如果想成为callback函数,必须把这个函数声明为static类型。  
   
  g(&x::f);//   x::f函数调用形式只能出现在类内,或者它的子类内。在外部是  
  不允许通过x::f方式访问类的成员函数(除非是static函数)  
  Top

6 楼jet8(jet8)回复于 2006-03-11 22:17:38 得分 0

我现在明白其中的道理了:非静态成员函数在调用之前,编译系统会插入一个this指针作为函数的参数,但如果将该函数作为回调函数的话,则在调用的时候无法为其插入this指针,函数也就不能正确的工作了。我的程序中,回调函数需要访问类中的成员变量,所以我没有使用静态函数而是使用友元函数。现在问题已经解决,谢谢大家的讨论。Top

相关问题

  • 当函数包含函数指针类型参数时,为什么当是一个类的成员函数时,要用静态的?
  • 求助:含有函数指针参数的函数模板
  • 函数模板问题(带一个函数指针参数)
  • (指针)一个指针作为函数参数的问题
  • 问一下关于指向函数的指针作函数参数的问题!!!!
  • 关于类成员函数中函数指针参数的问题!!
  • 函数指针作为参数的问题
  • 一个指针作为参数调用函数的问题
  • 如何传递成员函数指针参数
  • 将函数指针作为参数,应该怎么办?

关键词

  • 函数
  • 不行
  • cout
  • using namespace std

得分解答快速导航

  • 帖主:jet8
  • sankt
  • howyougen
  • ugg

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo