0

我知道我应该在官方 RakNet 论坛上发布这个,但我确实有,但它似乎已经死了。

我在这里问的原因是因为我不知道 C++,我是一名游戏开发人员,我们正在使用 Unity3D/C# 来开发我们的新游戏,它将是多人游戏,因为 RakNet 是开源的,我想要试一试。

所以,我们开始吧,这是错误日志:

raknet_wrap.cxx(15441):错误 C2558:类“RakNet::ReliabilityLayer”:没有可用的复制构造函数或复制构造函数被声明为“显式”

错误所在的行是这样的:

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

4

2 回答 2

0

所以我终于设法构建了最新 RakNet 版本的 RakNet C# DLL。

而且,由于我不希望任何没有 C++ 经验的人经历我所经历的疯狂,我只是共享 DLL 以方便使用。只需将其导入您的项目并开始使用它。

这是:https ://drive.google.com/file/d/0BwuOJwLuDZfnM29DTFlLTWZWOXc/view?usp=sharing

于 2015-02-24T15:59:10.887 回答
0

好的,谁正在看这个并且没有一个成功的答案。

这显然是 MSVC 2013 中的编译器错误(这就是我尝试过的)。

SWIG 使用以下行生成文件“RakNet_wrap.cxx”:

jresult = new ReliabilityLayer((const ReliabilityLayer &)result); 

最快的解决方法是编辑此行,使其显示为:

jresult = new ReliabilityLayer(result); 

因此强制转换变为隐式而不是显式,MSVC 2013 接受了这一点。

唯一的问题是,当您点击 Build 时,SWIG 将覆盖此文件并再次引入错误。所以只需删除 SWIG 预构建步骤(Alt+F7->Build Events->Pre-Build Event 从命令行中删除 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

于 2015-06-09T23:11:02.983 回答