| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 804 人关注过本帖
标题:有种函数指针不会定义,求教
只看楼主 加入收藏
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:3 
有种函数指针不会定义,求教
程序代码:
#include <iostream>

class X
{
   
public:
    void f1(){}

    static void f2(){}
};

void f2(){}

int main()
{
    //普通的函数指针技能指向一般的函数,也能指向某个类的静态函数
    void (*p1)() = f2;
    void (*p2)() = X::f2;

    //对一般函数和某个类的静态函数的调用和对一般的函数调用是一样的,都是全局的
    p1();
    p2();

    //我现在想定义一种只能指向  某个类的静态函数  的指针,但是不能指向一般的全局函数
    //但是出错
    //void (* X::p3)() = f2;     //error C2039: “p3”: 不是“X”的成员
    //void (* X::p4)() = X::f2;  //error C2039: “p4”: 不是“X”的成员

    //这样定义的话,出错误, 无法指向一般全局函数
    //void (X:: *p5)() = f2;
    //error C2440: “初始化”: 无法从“void (__cdecl *)(void)”转换为“void (__thiscall X::* )(void)”

    //这样定义的话,出错误, 无法指向某个类的静态函数
    //void (X:: *p6)() = X::f2;
    //error C2440: “初始化”: 无法从“void (__cdecl *)(void)”转换为“void (__thiscall X::* )(void)”

    //这样定义的话,语法错误, 用于指向向某个类的非静态函数
    //void (X:: *p7)() = X::f1;
    //error C3867: “X::f1”: 函数调用缺少参数列表;请使用“&X::f1”创建指向成员的指针

    //这样定义的话,能通过, 用于指向向某个类的非静态函数
    void (X:: *p7)() = &X::f1;

    //但是调用出错, 我知道有个this指针的问题
    //p7();
    //error C2064: 项不会计算为接受 0 个参数的函数

    //这样才可以,但是还是没有实现我想做的。
    X xx;
    (&xx->* p7)();
   
         
    system("pause");
    return 0;
}


请问  怎么定义 : 一种只能指向  某个类的静态函数  的指针,但是不能指向一般的全局函数






[ 本帖最后由 死了都要C 于 2012-2-8 21:13 编辑 ]
搜索更多相关主题的帖子: void 
2012-02-08 21:12
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
忘了说 VC2005编译的

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2012-02-08 21:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:19 
请问  怎么定义 : 一种只能指向  某个类的静态函数  的指针,但是不能指向一般的全局函数
------ 没有办法,因为 普通函数 和 类静态函数 是同一种类型
2012-02-09 08:18
bulgasari
Rank: 1
等 级:新手上路
帖 子:2
专家分:1
注 册:2012-2-9
收藏
得分:1 
我一点都没看通我擦...完全新鸟一个...
2012-02-09 14:26
快速回复:有种函数指针不会定义,求教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019604 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved