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() );