C++"转换失去限定符"编译错误

Chr*_*isV 1 c++ swig

今天调试SWIG文字图时遇到了一个有趣的问题.任何人都关心开导我,为什么VISUAL 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);
};
}
Run Code Online (Sandbox Code Playgroud)

删除constfrom const ourLib::Char * tmp导致我描述的错误.

Mic*_*urr 9

说你有以下功能:

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

如果你传入一个非const char*,那么当test()返回时,编译器就会失去p指向的东西const.

这与本C++ FAQ Lite问题中给出的原因基本相同(处理指针指针而不是指针引用):