2012-09-02 6 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이 꿀꺽 꿀꺽가 자동으로 만들어 래퍼 클래스의 이름입니다 . 내 인터페이스 파일에 typemaps.istd_string.i을 포함하지만이 같은 오류 메시지를 받았습니다

int initHex(const string x) 
{..} 

: 나의 C++ 코드에서 나는 initHex 방법을 선언합니다.

누구든지이 문제를 해결할 수 있다면 정말 감사하겠습니다.

+1

헤더에'using namespace std;'또는'std :: string;'이 있어야합니다. 첫 번째는 일반적으로 매우 나쁜 형식이며 SWIG의 경우 매우 나쁩니다. 후자는 SWIG가 처리 할 수없는 것입니다. 함수를'int initHex (const std :: string x)'로 선언하십시오. (Aside : 왜'const'입니까? 여기 값으로 전달하고 있습니다.) –

+0

우선 여러분의 도움에 감사 드리며, 헤더 파일을 검사했습니다. 나는 네임 스페이스 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

관련 문제