注册 登录
编程论坛 C++教室

函数指针问题,高手帮忙看下,谢了。

发布于 2010-05-06 22:32, 378 次点击
#include"stdafx.h"
 #include<iostream>
using namespace std;
class A
{
public:
    int (A::*j_point)(int j);
public:
    int show(int j)
    {
         return int(j);
    }
};
long display(int i)
{
   return long(i);
}
int main()
{
    A a;
    long (*i_point)(int i);
    a.j_point=&A::show;
    cout<<(a.*j_point)(5)<<endl;
    i_point=display;
    cout<<i_point(5)<<endl;
    return 0;
}

1>d:\documents and settings\user\my documents\visual studio 2005\projects\test3\test3\test3.cpp(23) : error C2065: “j_point”: 未声明的标识符
这是为什么?指向类的成员函数的指针不是这样使用 吗?
2 回复
#2
最近不在2010-05-06 23:40
#include<iostream>
using namespace std;
class A
{
public:
    //int (A::*j_point)(int j);  //这一行去掉,类里面没用到
public:
    int show(int j)
    {
         return int(j);
    }
};
long display(int i)
{
   return long(i);
}
int main()
{
    int (A::*j_point)(int j) = &A::show;  //在此处申明定义j_ponit初始化
    A a;
    cout<<(a.*j_point)(5)<<endl;
   
    long (*i_point)(int i);
    i_point=display;
    cout<<i_point(5)<<endl;
    return 0;
}
#3
debroa7232010-05-07 00:56
class A;//得先声明这个类
typedef int ( A::*FunPtr_t )(int j) ;
class A
{
public:
  FunPtr_t m_pFun;
......
}
使用
A a;
a.m_pFun = &A::show ;
(a.*(a.m_pFun))(5);//你的错误应该是调用时有问题,要先用*取出函数指针的函数地址,而类的成员函数指针的调用是需要
实例化的对象来调用,所以要加上a.来调用这个函数,和调用类的成员变量和成员函数一样的概念。
1