谁能解决这个问题,我就崇拜他!!

sunyuhsy 2003-01-15 03:42:52
我想把下边的代码写到类里去,由于涉及到函数数组,所以总是不成功!该怎么办?
我用的是VC++;

//以下代码在头文件中
typedef int (hdlc_func)(PVOID pParam);
int hdlcfree(PVOID pParam); //HDLCS_FREE 0
int hdlcdmasr(PVOID pParam); //HDLCS_DMASR 1
int hdlcsarmodr(PVOID pParam); //HDLCS_SARMODR 2
int hdlcsnrmodr(PVOID pParam); //HDLCS_SNRMODR 3
int hdlcsarmest(PVOID pParam); //HDLCS_SARMEST 4
int hdlcsnrmest(PVOID pParam); //HDLCS_SNRMEST 5
int hdlcdisc(PVOID pParam); //HDLCS_DISC 6
//以下代码在CPP文件中
hdlc_func * hdlcswitch[] = {
(hdlc_func *)hdlcfree, //HDLCS_FREE 0
(hdlc_func *)hdlcdmasr, //HDLCS_DMASR 1
(hdlc_func *)hdlcsarmodr, //HDLCS_SARMODR 2
(hdlc_func *)hdlcsnrmodr, //HDLCS_SNRMODR 3
(hdlc_func *)hdlcsarmest, //HDLCS_SARMEST 4
(hdlc_func *)hdlcsnrmest, //HDLCS_SNRMEST 5
(hdlc_func *)hdlcdisc, //HDLCS_DISC 6
};
int hdlcfree(PVOID pParam){return 0;} //HDLCS_FREE 0
int hdlcdmasr(PVOID pParam){return 0;} //HDLCS_DMASR 1
int hdlcsarmodr(PVOID pParam){return 0;} //HDLCS_SARMODR 2
int hdlcsnrmodr(PVOID pParam){return 0;} //HDLCS_SNRMODR 3
int hdlcsarmest(PVOID pParam){return 0;} //HDLCS_SARMEST 4
int hdlcsnrmest(PVOID pParam){return 0;} //HDLCS_SNRMEST 5
int hdlcdisc(PVOID pParam){return 0;} //HDLCS_DISC 6
//end. 我想把上边的代码封装到类里面去,可是总是不成功,我封装的代码(简化)如下:
//以下代码在头文件中
#define HDLCSTATES 7 //状态函数数目
class CHdlcb
{
public:
CHdlcb();
virtual ~CHdlcb(){};
public:
int (* hdlcswitch[HDLCSTATES])(PVOID pParam);
int hdlcfree(PVOID pParam); //HDLCS_FREE 0
int hdlcdmasr(PVOID pParam); //HDLCS_DMASR 1
int hdlcsarmodr(PVOID pParam); //HDLCS_SARMODR 2
int hdlcsnrmodr(PVOID pParam); //HDLCS_SNRMODR 3
int hdlcsarmest(PVOID pParam); //HDLCS_SARMEST 4
int hdlcsnrmest(PVOID pParam); //HDLCS_SNRMEST 5
int hdlcdisc(PVOID pParam); //HDLCS_DISC 6
};
//以下代码在CPP文件中
CHdlcb::CHdlcb()
{
int (* hdlcswitch[HDLCSTATES])(PVOID pParam) =
{
hdlcfree, //HDLCS_FREE 0
hdlcdmasr, //HDLCS_DMASR 1
hdlcsarmodr, //HDLCS_SARMODR 2
hdlcsnrmodr, //HDLCS_SNRMODR 3
hdlcsarmest, //HDLCS_SARMEST 4
hdlcsnrmest, //HDLCS_SNRMEST 5
hdlcdisc, //HDLCS_DISC 6
};
}
int CHdlcb::hdlcfree(PVOID pParam){return 0;} //HDLCS_FREE 0
int CHdlcb::hdlcdmasr(PVOID pParam){return 0;} //HDLCS_DMASR 1
int CHdlcb::hdlcsarmodr(PVOID pParam){return 0;} //HDLCS_SARMODR 2
int CHdlcb::hdlcsnrmodr(PVOID pParam){return 0;} //HDLCS_SNRMODR 3
int CHdlcb::hdlcsarmest(PVOID pParam){return 0;} //HDLCS_SARMEST 4
int CHdlcb::hdlcsnrmest(PVOID pParam){return 0;} //HDLCS_SNRMEST 5
int CHdlcb::hdlcdisc(PVOID pParam){return 0;} //HDLCS_DISC 6
//咳!编译总是出错,不知道该怎么改??
...全文
3 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunyuhsy 2003-01-15
太厉害了!通过阿!崇拜你一下:)谢谢啦!
怎么样才能给你分数???
这是我的头儿让我把这段状态机处理函数改到类里面去的,没办法:(

我原来写的为什么编译不通过呢?在哪里可以看到有关“类成员函数指针,类中的数据的初始化”的知识?
回复
MicroAngel 2003-01-15
说真的,你这样改的意义不大
回复
MicroAngel 2003-01-15
//以下代码在头文件中
#define HDLCSTATES 7 //״̬º¯ÊýÊýÄ¿
class CHdlcb;

typedef void* PVOID;
typedef int (CHdlcb::* HDLC_FUNC)(PVOID pParam);

class CHdlcb
{
public:
CHdlcb();
virtual ~CHdlcb(){};
public:
HDLC_FUNC hdlc_func[HDLCSTATES];
int hdlcfree(PVOID pParam); //HDLCS_FREE 0
int hdlcdmasr(PVOID pParam); //HDLCS_DMASR 1
int hdlcsarmodr(PVOID pParam); //HDLCS_SARMODR 2
int hdlcsnrmodr(PVOID pParam); //HDLCS_SNRMODR 3
int hdlcsarmest(PVOID pParam); //HDLCS_SARMEST 4
int hdlcsnrmest(PVOID pParam); //HDLCS_SNRMEST 5
int hdlcdisc(PVOID pParam); //HDLCS_DISC 6
};

//以下代码在CPP文件中
CHdlcb::CHdlcb()
{
hdlc_func[0]=hdlcfree;
hdlc_func[1]=hdlcdmasr;
hdlc_func[2]=hdlcsarmodr;
hdlc_func[3]=hdlcsnrmodr;
hdlc_func[4]=hdlcsarmest;
hdlc_func[5]=hdlcsnrmest;
hdlc_func[6]=hdlcdisc;
}

int CHdlcb::hdlcfree(PVOID pParam){return 0;} //HDLCS_FREE 0
int CHdlcb::hdlcdmasr(PVOID pParam){return 0;} //HDLCS_DMASR 1
int CHdlcb::hdlcsarmodr(PVOID pParam){return 0;} //HDLCS_SARMODR 2
int CHdlcb::hdlcsnrmodr(PVOID pParam){return 0;} //HDLCS_SNRMODR 3
int CHdlcb::hdlcsarmest(PVOID pParam){return 0;} //HDLCS_SARMEST 4
int CHdlcb::hdlcsnrmest(PVOID pParam){return 0;} //HDLCS_SNRMEST 5
int CHdlcb::hdlcdisc(PVOID pParam){return 0;} //HDLCS_DISC 6


//建议你看看类成员函数指针,类中的数据的初始化
回复
Chrisma 2003-01-15
我想不应该在CHdlcb::CHdlcb()再定义hdlcswitch, 有什么意义呢?
CHdlcb::CHdlcb()
{
int (* hdlcswitch[HDLCSTATES])(PVOID pParam) =
...
//不如直接改成hdlcswitch[...]= ...;就可以了
}
回复
Chrisma 2003-01-15
我想不应该在CHdlcb::CHdlcb()再定义hdlcswitch, 有什么意义呢?
CHdlcb::CHdlcb()
{
int (* hdlcswitch[HDLCSTATES])(PVOID pParam) =
...
//不如直接改成hdlcswitch[HDLCSTATES]={ ... };就可以了
}
回复
发动态
发帖子
工具平台和程序库
创建于2007-09-28

2.4w+

社区成员

C/C++ 工具平台和程序库
申请成为版主
社区公告
暂无公告