2010-04-20 12 views
8

Ho una funzione che richiede const some_type** come argomento (some_type è una struttura e la funzione richiede un puntatore a un array di questo tipo). Ho dichiarato una variabile locale di tipo some_type* e l'ho inizializzata. Poi chiamo la funzione come f(&some_array), e il compilatore (GCC) dice:'Conversione non valida da some_type ** a const some_type **'

error: invalid conversion from ‘some_type**’ to ‘const some_type**’ 

Qual è il problema? Perché non posso convertire una variabile in const?

risposta

1

Probabilmente è necessario specificare un altro contesto, ad esempio l'argomento ha passato o meno dati (o entrambi?) Alla funzione?

provare a fare il const variabile così:

some_type const *some_array = ....; 

Questa legge come "some_array è un puntatore ad un some_type const". Il codice non può modificare la cosa puntata. Quindi devi dichiarare la variabile const prima di passarla alla funzione.

(Edited ...)

+1

"No" :) (http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.17) – Constantin

+0

Huh. Questo è stato contrassegnato come la risposta accettata anche se non affronta la domanda sul "perché"? = ( – jamesdlin

1

Avete alcune opzioni per ottenere intorno a ciò che jamesdlin delineato nella sua risposta.

È possibile utilizzare una variabile intermedia.

some_type const* const_some_array = some_array; 
f(&const_some_array); 

È possibile modificare i parametri di f.

void f(some_type const* const* some_array); 
Problemi correlati