我知道我应该在官方的RakNet论坛上发布这个帖子,但我确实有,但它似乎已经死了。
我在这里问的原因是因为我不知道C ++,我是一名游戏开发者,我们正在使用Unity3D / C#来开发我们的新游戏,它将是多人游戏,而RakNet是Open来源我想尝试一下。
所以,我们走了,这是错误日志:
raknet_wrap.cxx(15441):错误C2558:类'RakNet :: ReliabilityLayer':没有可用的复制构造函数或复制构造函数被声明为'explicit'
错误的行是:
jresult = new ReliabilityLayer((const ReliabilityLayer &)result);
全功能:
SWIGEXPORT void * SWIGSTDCALL CSharp_RakPeer_RemoteSystemStruct_reliabilityLayer_get(void * jarg1) {
void * jresult ;
RakNet::RakPeer::RemoteSystemStruct *arg1 = (RakNet::RakPeer::RemoteSystemStruct *) 0 ;
ReliabilityLayer result;
arg1 = (RakNet::RakPeer::RemoteSystemStruct *)jarg1;
result = ((arg1)->reliabilityLayer);
jresult = new ReliabilityLayer((const ReliabilityLayer &)result);
return jresult;
}
有人可以告诉我为什么它不起作用并为一个全新的C ++解释它所以我能理解错误吗?
(编辑)还要提供ReliabilityLayer类!这是:http://pastebin.com/qTXedJFw
答案 0 :(得分:0)
所以我终于设法构建了最新RakNet版本的RakNet C#DLL。
而且,由于我不希望任何没有C ++经验的人经历我所经历的疯狂,我只是为了方便使用而共享DLL。只需将其导入您的项目并开始使用它。
这是:https://drive.google.com/file/d/0BwuOJwLuDZfnM29DTFlLTWZWOXc/view?usp=sharing
答案 1 :(得分:0)
对于正在观看此节目并且没有成功答案的人,可以。
这显然是MSVC 2013中的一个编译器错误(这就是我的尝试)。
SWIG使用以下行生成文件'RakNet_wrap.cxx':
jresult = new ReliabilityLayer((const ReliabilityLayer &)result);
最快的方法是编辑这一行,使其显示为:
jresult = new ReliabilityLayer(result);
因此,转换变为隐式而非显式,MSVC 2013接受此。
唯一的问题是,当您点击Build时,SWIG将覆盖此文件并再次引入错误。因此,只需删除SWIG预建步骤(Alt + F7->构建事件 - >预构建事件从命令行中删除PreBuild.bat)并再次构建。现在它将成功编译和链接。
如果您需要修改源代码并再次运行SWIG,请不要忘记再次放置PreBuild.bat文件!
也使用SWIG 2.0.12;我试过的最新版本(3.0.5);生成损坏的C#代码(未定义的HandleRef和IntPtr,因为System.Runtime.InteropServices既不是显式的,也不是通过'using'关键字导入的)。 我已经向SWIG项目提出了一个关于此问题的门票:https://github.com/swig/swig/issues/433