当前位置:  技术问答>linux和unix

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

    来源: 互联网  发布时间:2017-05-15

    本文导语:  在THash.h中: class TMemBase; //声明类                                                                                                                       ...

在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;                                                                 
}



求大神指点!

|
代码贴全点,变量声明,函数声明
最后一段代码太模糊了

    
 
 

您可能感兴趣的文章:

  • 请教:JSP编译器编译成字节码,跟别的编译器编译出来的有什么不同呢?
  • 编译GCC时能不能只编译C/C++的编译器?
  • 关于arm交叉编译器4.3.3编译程序报错,但是3.4.5却能编译通过的问题
  • 问:关于gcc编译器和g++编译器
  • C编译器 c++编译器 wieldylcc
  • 请问gdb是不是只能调试gcc编译的程序,在unix下用其它编译器编译的程序是不是不一定能用gdb调试的?
  • 请问哪里有反编译.class文件的反编译器?
  • linux下有没有能编译出16bit代码的C语言编译器?
  • 求一个编译好的的gcc编译器
  • Solaris下编译器版本不同,编译后的物件大小不同?
  • 求购java的反编译器,要求反编译效果好的-急!
  • 请问在linux下编译程序怎么设置编译器字节对齐?
  • eclipse 的c编译器编译问题
  • 怎么查看arm平台上的程序是用那个版本的交叉编译器编译的????
  • 我想把Java源码编译本地的exe,因为用jvm太慢了,但是不知用啥编译器?
  • 关于如何判断gcc之类的编译器的编译结果?
  • 使用gcc编译器进行代码编译出来的程序是否遵循gpl协议
  • 谁有JAVA的反编译器?就是把.class反编译成.java的工具?或者有decafe pro的注册机?
  • 用-g编译器选项编译程序就在makefile中按下面样子的加进去吗:
  • 在linux+x86下用交叉编译器编译出能在solaris+x86运行的文件时遇到的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 开源机器学习编译器 Milepost GCC
  • 编译器是怎么实现的?????
  • 请问Linux下,有图形界面的编译器吗?
  • 请问编译器是干什么用的
  • 哪有cc编译器下载?
  • 交叉编译器可以通用吗?
  • 问一下有什么方法可以用其它编译器伪装成GCC?
  • C语言编译器 Cilk
  • 找不到编译器????????求救::在线等待!
  • jsp编译器
  • gcc和cc和g++是一个编译器吗?
  • 谁有AIX 4.3.3下用的CC编译器.
  • linux 如何确定哪个编译器在执行
  • LINUX下使用Eclipse,如何使用交叉编译器?
  • 怎么样安装一个CC++编译器?
  • 编译器架构 LLVM
  • 关于java编译器
  • 请问,unix下的编译器支持c++的RTTI吗?
  • 要哪里下载gvim编译器,要怎么用呢,有中文版的吗
  • CUDA准实时编译器 Ocelot


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3