2012-09-02 159 views
3

我有一個令人沮喪的問題讓我花了很多時間處理它,但是我沒有找到任何解決方案。SWIG無法識別字符串參數

我想在SWIG中使用PHP中的C++類。我生成我的共享對象和它的一些方法,工作正常,但每當我打電話與字符串參數的方法作爲其輸入我得到這個錯誤:

Fatal error: Type error in argument 2 of PKI_Buf_initHex . Expected SWIGTYPE_p_std__string

PKI_Buf_initHex是SWIG自動進行包裝類的名稱。在我的C++代碼,我宣佈initHex方法:

int initHex(const string x) 
{..} 

我包含在我的接口文件typemaps.istd_string.i,但我得到了同樣的錯誤消息。

如果有人能幫我解決這個問題,我真的很感激。

+1

你必須在你的頭文件中有'using namespace std;'或'using std :: string;'。首先是非常糟糕的形式,對SWIG來說非常糟糕。後者是SWIG無法處理的。聲明你的函數爲'int initHex(const std :: string x)'(除此之外:爲什麼是'const'?你在這裏傳遞值) –

+0

首先非常感謝你的幫助,我檢查了我的頭文件並且我使用了namespace std;所以我改變它「使用std :: string」,並將我的函數更改爲「int initHex(const std :: string x),但沒有任何改變。沒有實現我自己的代碼,我也沒有看到源代碼,我只有頭文件和目標文件,我必須在PHP中爲一些用法開發代碼。) – A23149577

+0

其實我檢查了SWIG wrap.cpp文件對於我的代碼,我發現SWIG很好地識別了字符串類型: – A23149577

回答

15

你需要有:

%include <std_string.i> 

在痛飲接口足夠早(即std::string之前首先看到的)。

+0

我在哪裏可以找到關於其他類似的信息?爲了使用std :: map,std :: vector等...? –

+0

@RaydelMiranda我剛剛閱讀了swig源文件和庫,如果文檔沒有說清楚 – Flexo

+0

這是http://www.swig.org/Doc1.3/Library.html#Library_nn14連同關於向量的信息。 – TimSC