标题:有种函数指针不会定义,求教
取消只看楼主
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
结帖率:66.67%
已结贴  问题点数:20 回复次数:1 
有种函数指针不会定义,求教
程序代码:
#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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-360608-1-1.html




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

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