2015-02-23 69 views
0

一個惱人的錯誤,我知道我應該在官方RakNet論壇發佈這一點,但我確實有,但它似乎是死的地獄。與痛飲大廈RakNet C#包裝,獲得在構建

我之所以問這裏的原因是因爲我不知道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

回答

0

確定誰在看這一點,沒有一個成功的答案。

這顯然是MSVC 2013中的一個編譯器錯誤(這是我試過的)。

SWIG生成文件「RakNet_wrap.cxx」具有以下行:

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

它周圍的最快的辦法就是讓讀取編輯這一行:

jresult = new ReliabilityLayer(result); 

,因此鑄造變得隱含而不是明確的,MSVC 2013接受這一點。

唯一的問題是,當你擊築,SWIG將覆蓋該文件,並再次引入錯誤。因此,只需刪除SWIG預構建步驟(Alt + F7-> Build Events-> Pre-Build Event從命令行刪除PreBuild.bat)並再次構建。現在它將成功編譯和鏈接,因爲它應該。

不要忘記再次把PreBuild.bat文件,如果你需要修改源代碼,並再次運行痛飲!

也使用SWIG 2.0.12;我試過的最新版本(3.0.5);生成破碎的C#代碼(未定義的HandleRef和IntPtr,因爲System.Runtime.InteropServices不是顯式的,也不是通過'using'關鍵字導入的)。 我已經提出了有關此SWIG項目的票:https://github.com/swig/swig/issues/433