不同编译器对成员函数指针的解读

t26502 2014-04-11 08:54:28
在THash.h中:

class TMemBase; //声明类                                                                

typedef int (TMemBase::*PFUNC)(void *, void *, void *);

class THash{

private:

void SetFunc(TMemBase *pbase, PFUNC pfunc, RFUNC rfunc, CFUNC cfunc);

TMemBase *m_pbase;

};


在TMemBase.h中:

#include "THash.h"  

class TMemBase{

private:

virtual int Print(void *key, void *val, void *data) = 0;

virtual int Check(void *key, void *val, void *pdata) = 0;

virtual void GetKVlen(size_t &klen, size_t &vlen) = 0;

void SetFunc();

PFUNC m_pfunc;

RFUNC m_rfunc;

CFUNC m_cfunc;

};


setFunc的实现:
void TMemBase::SetFunc()                                                        
{
PFUNC pfunc = &TMemBase::Print;
RFUNC rfunc = &TMemBase::UpVale;
CFUNC cfunc = &TMemBase::Check;

m_pfunc = (int (TMemBase::*)(void *, void *, void *))pfunc;
m_rfunc = (int (TMemBase::*)(void *, void *, void *))rfunc;
m_cfunc = (int (TMemBase::*)(void *, void *, void *))cfunc;

m_pMem->SetFunc(this, m_pfunc, m_rfunc, m_cfunc);
}



问题在THash类中使用传入的成员函数指针的时候,G++编译器下编译是没有问题的,在xlC编译器下出现如下问题:
"THash.cpp", line 94.31: 1540-0251 (S) The "->*" operator cannot be applied to the undefined class "class TMemBase".
"THash.cpp", line 140.34: 1540-0251 (S) The "->*" operator cannot be applied to the undefined class "class TMemBase".
"THash.cpp", line 144.52: 1540-0251 (S) The "->*" operator cannot be applied to the undefined class "class TMemBase".
"THash.cpp", line 259.36: 1540-0251 (S) The "->*" operator cannot be applied to the undefined class "class TMemBase".
"THash.cpp", line 282.36: 1540-0251 (S) The "->*" operator cannot be applied to the undefined class "class TMemBase".
其中94行代码如下:
int THash::FRelace(void *key, void *val, bool lock)                             
{
int ret = 0;
void *v = NULL;

_LOCK_KEY();
ret = m_shm->shb_find(key, (void **)&v); //第94行
if (ret == _SHM_HASH_FOUND) {
ret = (m_pbase->*m_rfunc)(key, v, val);
} else if (ret == _SHM_HASH_SYS_ERROR) {
ret = -2;
} else {
ret = m_shm->shb_add(key, val);
}
_UNLOCK_KEY();

return ret;
}



求大神指点!
...全文
269 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
t26502 2014-04-11
  • 打赏
  • 举报
回复
最后一段代码只是展示一下出错的位置,其实与程序大部分代码无关系,而且在G++下编译时没有问题的。 1、THash.h没有包含TMemBase.h,但是做了TMemBase类的声明; 2、THash.h中声明了TMemBase类的成员函数指针; 3、THash类中只定义了TMemBase的类对象指针,并没有使用到TMemBase类的成员和成员函数(指针除外); 1、TMemBase.h包含了THash.h; 2、TMemBase类定义了THash类的对象,也使用了THash类的方法; 3、成员函数指针在TMemBase类中是纯虚函数,在其子类中实现。 G++下是完全没有问题的。
妳是个好人 2014-04-11
  • 打赏
  • 举报
回复
代码贴全点,变量声明,函数声明 最后一段代码太模糊了

1,194

社区成员

发帖
与我相关
我的任务
社区描述
该论坛主要探讨IBM AIX平台的安装、部署、应用开发等话题,并为网友们提供自由交流的平台。
社区管理员
  • IBM AIX社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧