2009-08-10 17 views
0

今天我在調試SWIG類型映射時遇到了一個有趣的問題。任何人都在關注爲什麼Visual C++ 2008在從ourLib::Char *轉換爲const ourLib::Char * &時出現「轉換失去限定符」錯誤的原因?我認爲Type * - >const Type *是一個簡單的轉換,並且(當調用函數時)Lvalue - >Lvalue &也是如此。C++「轉換失去限定符」編譯錯誤

編輯:我們最終的解決方案與打算:

// 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 ourLib::Char * tmpconst使我描述的錯誤。

+0

好像不應該是來自你所描述的錯誤。你能發佈一些代碼來重現錯誤嗎?另外,除了const之外,還有其他限定符嗎(例如volatile)? – 2009-08-10 21:11:10

+0

這是一個小寫的'char'嗎?也許你應該發佈一些代碼。 – GManNickG 2009-08-10 21:11:27

回答

9

假設您有以下功能:

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

如果你在一個非const char*過去了,那麼當test()返回編譯器會失去什麼p所指向的事實const

它本質上是在這個C++ FAQ精簡版的問題給予相同的原因(與指針到指針而非指針引用買賣):

+0

這將解釋它。 Argumentum ad Parashift一直是一種令人信服的策略。 – ChrisV 2009-08-10 21:38:27