Error: No se puede convertir char** a const char**.
Tengo el siguiente código:
static char *ListOfStr[] = {"str1", "str2", "str3"};
void Foo(const char **listOfStr)
{
// hacer algo
}
Cuando llamo a Foo
de la siguiente manera:
Foo(ListOfStr);
Obtengo el error “No se puede convertir char* a const char* (C2664 – vc++)”.
Sé cómo solucionar el problema utilizando casting o de otra manera, como definir un array constante en primer lugar.
Pero, ¿no sería seguro utilizar char* como const char*? ¿Por qué da error?
Supuse que habría una conversión automática al igual que de std::string
a const std::string
al pasarla a una función. Solo la inversa de esto, de cont char**
a char**
, debe dar el error sin un cast.
davy.ai
La razón por la que ocurre el error se debe a la
coherencia de const
. En la funciónFoo
, el parámetrolistOfStr
se declara comoconst char**
, lo que significa que la función se compromete a no modificar el contenido del arraylistOfStr
. Sin embargo, cuando pasasListOfStr
(que se declara comochar*[]
) aFoo
, intenta convertir unchar**
aconst char**
. Esta conversión no está permitida porque permitiría aFoo
modificar el contenido deListOfStr
, lo cual violaría la promesa hecha por el prototipo de la función.Usar una conversión para convertir
char**
aconst char**
técnicamente funcionaría, pero no es una solución segura, ya que permitiría a la función modificar el array supuestamente constante. La forma correcta de resolver este problema es definirListOfStr
comoconst char*[]
en lugar dechar*[]
, ya que esto refleja correctamente la intención del código.En general, siempre es mejor utilizar la coherencia de const en tu código, ya que hace que el código sea más robusto y más fácil de razonar. Aunque pueda parecer una molestia en algunos casos, es un buen hábito adquirirlo y te ahorrará posibles errores y fallos más adelante.