今天调试SWIG文字图时遇到了一个有趣的问题。有人想告诉我为什么从ourLib::Char *
转换为const ourLib::Char * &
时,Visual C ++ 2008会引发“转换丢失限定符”错误?我想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
会导致我所描述的错误。
答案 0 :(得分:9)
说你有以下功能:
void test( const char*& pRef)
{
static const char somedata[] = { 'a' ,'b', 'c', '\0'};
pRef = somedata;
}
如果你传入了非const char*
,那么当test()
返回时,编译器就会失去p
指向const
的事实。< / p>
这与本C ++ FAQ Lite问题(处理指针指针而不是指针引用)的原因基本相同:
答案 1 :(得分:0)
在以下代码中,
friend ostream & operator<<(ostream & output, const List& other)
{
for(int i=0;i<other.length();i++)
output << other.getData()[i] << " ";
return output;
}
要消除编译错误“转换失去限定符”,对于参数“ const List&other”,我将以下两种调用方法都更改为const。
T* getData() const
{
return data;
}
int length() const
{
return lSize;
}