当前位置: 技术问答>linux和unix
Linux g++编译调用模板函数的类不通过,但是VC2005通过
来源: 互联网 发布时间:2016-08-07
本文导语: 调用的错误为 UserMgr::RPCallFunc(uint 64, uint32,uint32, RPCCall) 调用没有匹配的函数 备选为 RPCallFunc(uint 64, unint32, uint32, RPCaller&)[with RPCCaller = RPCCall] 初步分析下来,是由于类型没有正确替换而导致编译不通过。 但是在VS2K5下编...
调用的错误为
UserMgr::RPCallFunc(uint 64, uint32,uint32, RPCCall) 调用没有匹配的函数
备选为 RPCallFunc(uint 64, unint32, uint32, RPCaller&)[with RPCCaller = RPCCall]
初步分析下来,是由于类型没有正确替换而导致编译不通过。
但是在VS2K5下编译是通过的。现在没有思路了各位帮忙。
以下为工程的介绍
一个RPCall的工程,大部分是模板对传进来的类型进行替换,而后被调用。注:该工程在VS2k5和linux都编译通过
一个RPCService的控制台程序,对RPCall进行调用。注:该工程在vs2k5下编译通过。在linux下在调用模板的函数的地方出错
以下为代码:
调用的地方
Orgstatus(std::string& _name, uint32 guid, int _g)
{
....
RPCallfunc(itr->second,GetSeq(),QUERY_FLAT,RPC_BIND_PARA(guid, _name,guid)//这里调用出错的。
}
template
bool RPCallfunc(uint64 guid,uint32 svrseq, uint32 funcSeq, RPCaller &caller, uint transid = 0, bool footy = fase)
{
return RPCallfunc(guid,svrseq,funcseq,&caller,transid,footy);
}
RPC_BIND_PARA方法:
template
RPCCallP1
RPC_BIND_PARA(A1 a1)
{
return RPCCallP1(a1);
}
RPCCallP1类:
tempalte
class RPCCallP1: public IRPCCallP
{
public:
RPCCallP1(A1 &a):_a1(a1){...}
void operator()(wt& pkt){...}
private:
A1 _a1;
}
百思不得其解。尝试着指定其类型
RPCallP1 a = RPC_BIND_PARA(guid);
然后再进行调用,可以编译通过,但是接下来有很多的回调函数,使用地址的这种方法就无效了。
有哪个朋友能帮下忙。谢谢。
UserMgr::RPCallFunc(uint 64, uint32,uint32, RPCCall) 调用没有匹配的函数
备选为 RPCallFunc(uint 64, unint32, uint32, RPCaller&)[with RPCCaller = RPCCall]
初步分析下来,是由于类型没有正确替换而导致编译不通过。
但是在VS2K5下编译是通过的。现在没有思路了各位帮忙。
以下为工程的介绍
一个RPCall的工程,大部分是模板对传进来的类型进行替换,而后被调用。注:该工程在VS2k5和linux都编译通过
一个RPCService的控制台程序,对RPCall进行调用。注:该工程在vs2k5下编译通过。在linux下在调用模板的函数的地方出错
以下为代码:
调用的地方
Orgstatus(std::string& _name, uint32 guid, int _g)
{
....
RPCallfunc(itr->second,GetSeq(),QUERY_FLAT,RPC_BIND_PARA(guid, _name,guid)//这里调用出错的。
}
template
bool RPCallfunc(uint64 guid,uint32 svrseq, uint32 funcSeq, RPCaller &caller, uint transid = 0, bool footy = fase)
{
return RPCallfunc(guid,svrseq,funcseq,&caller,transid,footy);
}
RPC_BIND_PARA方法:
template
RPCCallP1
RPC_BIND_PARA(A1 a1)
{
return RPCCallP1(a1);
}
RPCCallP1类:
tempalte
class RPCCallP1: public IRPCCallP
{
public:
RPCCallP1(A1 &a):_a1(a1){...}
void operator()(wt& pkt){...}
private:
A1 _a1;
}
百思不得其解。尝试着指定其类型
RPCallP1 a = RPC_BIND_PARA(guid);
然后再进行调用,可以编译通过,但是接下来有很多的回调函数,使用地址的这种方法就无效了。
有哪个朋友能帮下忙。谢谢。
|
LZ的帖子看着太难受了~~~~~~