当前位置: 技术问答>linux和unix
G++ 4.4.2和linux编译调用模板的函数,编译不通过,但是VC2005却可以。
来源: 互联网 发布时间:2016-08-10
本文导语: 之前的帖子格式不好。劳请版主删除之前的帖子。 谢谢。 调用的错误: UserMgr::RPCallFunc(uint 64, uint32,uint32, RPCCall ) 调用没有匹配的函数备选为 RPCallFunc(uint 64, unint32, uint32, RPCaller&)[with RPCCaller = RPCCall ] ...
之前的帖子格式不好。劳请版主删除之前的帖子。
谢谢。
调用的错误:
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); 然后再进行调用,可以编译通过,但是接下来有很多的回调函数,使用地址的这种方法就无效了。有哪个朋友能帮下忙。谢谢。
另外在linux下哪个编译器最接近VC2005的编译器呢?
谢谢。
调用的错误:
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); 然后再进行调用,可以编译通过,但是接下来有很多的回调函数,使用地址的这种方法就无效了。有哪个朋友能帮下忙。谢谢。
另外在linux下哪个编译器最接近VC2005的编译器呢?
|
如果你只能用vc的思维方式解决问题,建议你还是用vc编程。
|
我觉得这个问题还是值得考虑的。毕竟现在好多软件都需要有Windows版和Linux版。这个问题应该就是一个典型的源码多平台重用的问题。
一般情况可以用宏定义去解决………………
这个问题没看清楚具体的方案,观注中……&…………
一般情况可以用宏定义去解决………………
这个问题没看清楚具体的方案,观注中……&…………