invalid from fpermissive conversion c++

c++ - fpermissive - invalid conversion from ''const char*'' to ''char'' arduino



conversión inválida de ''const char*'' a ''char*'' (3)

Tener un código como se muestra a continuación. Tengo problemas para pasar los argumentos.

stringstream data; char *addr=NULL; strcpy(addr,retstring().c_str());

retstring() es una función que devuelve una cadena.

//more code printfunc(num,addr,data.str().c_str());

Me sale el error

conversión inválida de ''const char *'' a ''char *''.

inicializando el argumento 3 de ''void Printfunc (int, char *, char *)'' en el argumento 3 de la función

en la línea de arriba. La función se llama como se muestra a continuación

void Printfunc(int a, char *loc, char *stream)

por favor avíseme si necesito cambiar alguna inicialización.


Bueno, data.str().c_str() produce una char const* pero tu función Printfunc() quiere tener char* s. Basado en el nombre, no cambia los argumentos sino que simplemente los imprime y / o los utiliza para nombrar un archivo, en cuyo caso probablemente deba corregir su declaración.

void Printfunc(int a, char const* loc, char const* stream)

La alternativa podría ser convertir el char const* en un char* pero es preferible corregir la declaración:

Printfunc(num, addr, const_cast<char*>(data.str().c_str()));


Primero que nada este fragmento de código

char *addr=NULL; strcpy(addr,retstring().c_str());

no es válido porque no asignó memoria donde va a copiar retstring (). c_str ().

En cuanto al mensaje de error, entonces es lo suficientemente claro. El tipo de expresión data.str (). C_str () es const char * pero el tercer parámetro de la función se declara como char *. No puede asignar un objeto de tipo const char * a un objeto de tipo char *. O bien la función debe definir el tercer parámetro como const char * si no cambia el objeto apuntado por el tercer parámetro o no puede pasar el argumento de tipo const char *.


string::c.str() devuelve una cadena de tipo const char * como se ve here

Una solución rápida: intente printfunc(num,addr,(char *)data.str().c_str()) ;

Si bien lo anterior puede funcionar, es un comportamiento indefinido e inseguro.

Aquí hay una solución más agradable usando plantillas:

char * my_argument = const_cast<char*> ( ...c_str() );