Domanda

Ho creato un modulo lua con un gran numero di classi avvolti C ++ utilizzando sorso. Gli involucri sono generati e compilati (con -Wall) senza problemi. Tuttavia, in un paio di posti che ho trovato, mi imbatto nel seguente problema: assegnazione base dei dati membro non

.

Se corro:

Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> require('myModule')
> a = myModule.ClassA()

Posso quindi verificare che il metatabella collegato a "a" contiene tutti i dati utente (in questo caso i campi rispettivamente "b" e "c", di tipo classe ClassB ClassC.)

posso più fare:

> a.b = myModule.ClassB()

, che riassegna b per una nuova istanza di ClassB () con successo. Tuttavia, quando vado a fare:

> a.b.c = myModule.ClassC()

ricevo il messaggio di errore:

Error in ClassB_c_set (arg 2), expected 'ClassC *' got 'ClassB *'

Come se l'espressione sul lato destro della '=' era un oggetto dello stesso tipo come l'elemento contenente il campo dati da riassegnare. Sono sicuro Devo mancare qualcosa di semplice, ma sono stato sbattere la testa contro il muro per alcune ore oggi senza alcun risultato.

Qualcuno ha qualche idea? Grazie!

È stato utile?

Soluzione

Si scopre che si tratta di un bug in SWIG. Ho presentato un bug report che spiega la causa del problema .

Il problema era in realtà a causa di un problema di spazio dei nomi nidificato in combinazione con un equivoco di come funziona SWIG da parte mia. Ho dato per scontato che ogni elemento che ho portato in via% include nel mio file di interfaccia verrebbe processato in un modo che i processi gcc #includes. Tuttavia, in SWIG file devono essere% inclusi nell'ordine il loro contenuto viene fatto riferimento.

Vedere la segnalazione di bug legato per chiarimenti.

Altri suggerimenti

Sempre molto attenti con assegnazioni utilizzando SWIG! Si noti che il operator = () funzione si usa solo per i tipi nativi. Ogni volta che si assegnano i propri oggetti, solo l'indirizzo viene copiato.

Per saperne di più su questo post: SWIG C ++ per Python: Avviso (362) : operator = ignorato

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top