2009-08-10 9 views
0

J'ai rencontré un problème intéressant lors du débogage des typographies SWIG aujourd'hui. Quelqu'un se soucie de m'éclairer pourquoi Visual C++ 2008 jette une erreur "conversion perd qualificatifs" lors de la conversion de ourLib::Char * à const ourLib::Char * &? Je pensais que Type * ->const Type * était une conversion trivial, et (lors de l'appel des fonctions) Lvalue ->Lvalue & ainsi.C++ "conversion perd qualificatifs" erreur de compilation

EDIT: La solution que nous avons fini par aller avec:

// 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); 
}; 
} 

Retrait de la const de const ourLib::Char * tmp provoque l'erreur je l'ai décrit.

+0

On dirait qu'il ne devrait pas être une erreur de ce que vous décrivez. Pouvez-vous poster du code qui reproduit l'erreur? En outre, y a-t-il d'autres qualificatifs impliqués autres que const (par exemple volatile)? –

+0

Est-ce supposé être un «char» minuscule? Peut-être que vous devriez poster un peu de code. – GManNickG

Répondre

9

que vous avez eu la fonction suivante:

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

Si vous avez passé dans un non-const char*, puis quand test() retourné le compilateur aurait perdu le fait que ce p pointe vers est const.

C'est essentiellement la même raison que donné dans ce C++ FAQ question Lite (traitant des pointeurs à-pointeurs plutôt que des références de pointeur):

+0

Cela l'expliquerait. Argumentum ad Parashift a toujours été une tactique convaincante. – ChrisV

Questions connexes