| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1327 人关注过本帖
标题:[求助]新手学c++,几行代码出错 不知怎么改
只看楼主 加入收藏
月影传说
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-11-14
收藏
 问题点数:0 回复次数:12 
[求助]新手学c++,几行代码出错 不知怎么改
#include<iostream.h>
class CA
{
public:
char lcFun(int a){ return a; }
};
CA ca;
typedef char (CA::*PTRFUN)(int); //这是什么意思?请各位大侠详细讲一下
PTRFUN pFun;
int main(int argc,char *argv[])
{
pFun = CA::lcFun;
ca.(*pFun)(2);
return 0;
}
搜索更多相关主题的帖子: 代码 
2006-11-28 10:11
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
函数指针的名称
以后就用PTRFUN来代替上面的,来申请函数指针
并且是C::的函数指针

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-11-28 13:28
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
那个指针 好象需要放在类里面来做
你试试

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-11-28 13:30
forever043
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2006-10-15
收藏
得分:0 
系统中类的成员函数的调用与一般的函数不同,不能直接声明成
" typedef char (CA::*PTRFUN)(int) "
这种形式,
它调用的时候会将当前对象的this指针作为一个参数传给成员函数,
内存中只会保留一份类的成员函数, 系统用传递this指针的方式来实现不同对象的成员函数调用.
要用指针指向成员函数的话, 必须要把它声明为静态成员函数.

例:

#include<iostream.h>
class CA
{
public:
static char lcFun(int a){ return a; }
};
typedef char (*PTRFUN)(int); //只要用普通的函数指针就行了

int main(int argc,char *argv[])
{
// CA ca; 这句可以不用了
PTRFUN pFun; //定义一个函数指针类型的变量, 它具有一个int 型参数, 返回一个char值

pFun = CA::lcFun; //用pFun指向CA类的lcFun静态成员函数
cout<<pFun(2); //与普通的函数指针调用没什么两样
return 0;
}

学操作系统真的好郁闷啊.........
2006-11-28 18:09
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
不会吧
我应用过啊
不是static的
而且以前我也问过ajax

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-11-29 21:44
forever043
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2006-10-15
收藏
得分:0 

不用static我也试过, 但好像真的不行, 总是说无法进行类型转换
难道有其它特别的方法?
期待回答中.....


学操作系统真的好郁闷啊.........
2006-11-30 06:30
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
收藏
得分:0 
typedef char (CA::*PTRFUN)(int);没问题,PTRFUN是一个指向CA的成员函数的指针类型,此成员函数的返回值为char,参数为int;


pFun = CA::lcFun;
ca.(*pFun)(2);

两句改成

pFun=&CA::lcFun;
(ca.*pFun)(2);

就行了。

需要注意的是.*是一个操作符,中间不能隔开

2006-11-30 12:37
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
以下是引用forever043在2006-11-28 18:09:07的发言:
系统中类的成员函数的调用与一般的函数不同,不能直接声明成
" typedef char (CA::*PTRFUN)(int) "
这种形式,
它调用的时候会将当前对象的this指针作为一个参数传给成员函数,
内存中只会保留一份类的成员函数, 系统用传递this指针的方式来实现不同对象的成员函数调用.
要用指针指向成员函数的话, 必须要把它声明为静态成员函数.

例:

#include<iostream.h>
class CA
{
public:
static char lcFun(int a){ return a; }
};
typedef char (*PTRFUN)(int); //只要用普通的函数指针就行了

int main(int argc,char *argv[])
{
// CA ca; 这句可以不用了
PTRFUN pFun; //定义一个函数指针类型的变量, 它具有一个int 型参数, 返回一个char值

pFun = CA::lcFun; //用pFun指向CA类的lcFun静态成员函数
cout<<pFun(2); //与普通的函数指针调用没什么两样
return 0;
}

你说的之所以能行,是因为static函数不在类域内,所以用一个普通指针也可以


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-11-30 12:41
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 

#include<iostream.h>
class CA
{
typedef char (*PTRFUN)(int); //这是什么意思?请各位大侠详细讲一下
PTRFUN pFun;
public:
char lcFun(int a){ return a; }
CA(){char (CA::*pFun}(int)=CA::lcFun;}
};
CA ca;
//typedef char (CA::*PTRFUN)(int); //这是什么意思?请各位大侠详细讲一下
//PTRFUN pFun;
int main(int argc,char *argv[])
{
pFun = CA::lcFun;
ca.(*pFun)(2);
return 0;
}

看看这个行不


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-11-30 12:49
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
收藏
得分:0 
肯定不行

2006-11-30 13:20
快速回复:[求助]新手学c++,几行代码出错 不知怎么改
数据加载中...
 
   



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

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