2010-04-20 7 views
8

Tengo una función que requiere const some_type** como argumento (some_type es una estructura, y la función necesita un puntero a una matriz de este tipo). Decidí una variable local de tipo some_type* y la inicialicé. Entonces llamo a la función como f(&some_array), y el compilador (gcc) dice:'Conversión no válida de some_type ** a const some_type **'

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

Cuál es el problema aquí? ¿Por qué no puedo convertir una variable en const?

Respuesta

1

Probablemente necesites especificar un poco más de contexto, por ejemplo, ¿el argumento pasa datos dentro o fuera de (o ambos?) La función?

intentar hacer su const variable así:

some_type const *some_array = ....; 

esto se lee como "some_array es un puntero a una some_type const". El código no puede modificar lo que se apunta. Entonces debes declarar tu constante variable antes de pasarla a la función.

(Editado ...)

+1

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

+0

Huh. Esto se marcó como la respuesta aceptada, aunque no aborda la pregunta sobre "por qué" en absoluto? = ( – jamesdlin

1

Usted tiene algunas opciones para moverse por lo jamesdlin indica en su respuesta.

Puede usar una variable intermedia.

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

Puede cambiar los parámetros de f.

void f(some_type const* const* some_array); 
Cuestiones relacionadas