2013-12-16 23 views
4

我正在嘗試使用swig來構建圍繞C++庫的ruby包裝。 其中大部分似乎正在工作,但我有一個問題,我很確定與上述警告有關。swig沒有關於基類'std :: string'的已知信息,忽略

它看起來像我包裝的類之一是從std :: string繼承。

我運行swig時看到上面的警告消息。

當我打電話的紅寶石的對象上的方法,該方法應該返回一個字符串,我看到這個

痛飲:: Type_p_std__string:0X .....

我想我需要一些如何解決上述警告對此有用,有什麼想法?

+0

我覺得在你的課堂被swig處理之前,你需要'%include'std_string.i''。 – nishantjr

+0

但是,該文件會發生什麼?我試圖包含,但這沒有任何影響 – nPn

+0

您的百分比是否包含在內?或者#include?請注意,這些在SWIG接口文件中是不同的。 – nishantjr

回答

4

SWIG抱怨說它不知道std :: string類,所以不能爲它生成代碼。

SWIG庫std_string.i具有語言特定的代碼,用於將C++字符串映射到目標語言字符串類。在之前添加%include "std_string.i"生成您的類的代碼應修復該錯誤。

請注意%include與swig界面文件中的#include不同。

+0

Gah ...我嘗試了以下內容:'%include「std_string.i」','%include std_string.i'和'%include 我的文件,但它仍然在C#中爲字符串生成SWIGTYPE_p_string:/ –

+1

...等等!修復。在頭文件中,我定義了字符串,解決了一些奇怪的typedef,我用std :: string替換了,一切都很好:) –

5

每當在SWIG輸出中看到SWIG :: Type_p_std__string或類似的隱祕類型時,就意味着缺少類型映射。在這裏,SWIG需要導出std :: string。通常這是因爲它在函數調用參數中使用,或者在您要導出的函數中用作返回值;在你的情況下,這是因爲std :: string是一個基類。 SWIG爲常用的STL類(如字符串和向量)提供了一個類型圖的「庫」,您只需通過%include指令導入即可。有關SWIG附帶的其他.i,請參閱http://www.swig.org/Doc2.0/Library.html