문제

오늘 SWIG 타입 맵을 디버깅하면서 흥미로운 문제를 겪었습니다. 시각적 C ++ 2008이 왜 "변환을 잃어버린"오류가 발생하는지에 대한 신경을 써야합니다. ourLib::Char * 에게 const ourLib::Char * &? 나는 생각했다 Type * -> const Type * 사소한 변환이었고 (함수를 호출 할 때) Lvalue -> Lvalue & 또한.

편집 : 우리가 끝나는 솔루션은 다음과 같습니다.

// ourLib::Char is a typedef'ed char on Win32

%typemap(in) const char* (const ourLib::Char* tmp)
{
    if (!bapiLua::LuaTraits<ourLib::Char*>::FromLuaObject(L, $argnum, tmp)) SWIG_fail;
    $1 = const_cast<char *>(tmp);
}

// And in a different source file, already written:
namespace bapiLua {
template<>
struct LuaTraits<ourLib::Char*>
{
    static ourLib::Bool FromLuaObject(lua_State* L, int pos, const ourLib::Char*& o_result);
};
}

제거 const ~에서 const ourLib::Char * tmp 내가 설명한 오류가 발생합니다.

도움이 되었습니까?

해결책

다음 기능이 있다고 가정 해 봅시다.

void test(  const char*& pRef)
{
    static const char somedata[] = { 'a' ,'b', 'c', '\0'};
    pRef = somedata;
}

당신이 비 정통으로 지나간 경우 char*, 그럼 언제 test() 컴파일러를 반환했습니다. p IS를 가리키고 있습니다 const.

본질적 으로이 C ++ FAQ 라이트 질문에 주어진 것과 같은 이유입니다 (포인터 참조 대신 포인터 대 포인터를 다루는 것) :

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top