Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 5 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Lun Oct 25, 2010 1:19 pm
Mensajes: 6

Nota Publicado: Dom Ene 09, 2011 4:19 am 
Arriba  
Buenos dias, tengo un problema en un programa, que me dice que la conversion esta obsoleta, les dejo un trozo de codigo aver si me pueden ayudar. muchas gracias

Este es el constructor por el qual le paso los parametros
sabata::sabata(char *reff, char *marcaa, char *colorr, char *modell)
{
ref = new char[40];
strcpy(ref,reff);
marca = new char[40];
strcpy(marca,marcaa);
color = new char[40];
strcpy(color,colorr);
model = new char[40];
strcpy(model,modell);
}
i este es mi programa principal donde llamo al contructor
sabata s2("t46t","Kelmo","blanc","guay");

error

main.cpp:13: warning: deprecated conversion from string constant to ‘char*’
main.cpp:13: warning: deprecated conversion from string constant to ‘char*’
main.cpp:13: warning: deprecated conversion from string constant to ‘char*’
main.cpp:13: warning: deprecated conversion from string constant to ‘char*’

Alguien sabe si es que me falta algun paquete que instalar o que es?¿

Gracias

 Perfil Email  

Desconectado
Forista Mayor
Forista Mayor

Registrado: Vie Ago 24, 2007 11:00 pm
Mensajes: 794
Ubicación: Galicia - España

Nota Publicado: Dom Ene 09, 2011 5:03 am 
Arriba  
El primer resultado de google si buscas warning: deprecated conversion from string constant to ‘char*’ creo que lo explica bien:

http://blog.wolffmyren.com/2008/05/02/g ... %E2%80%99/

_________________
Mi blog: Conocimiento Abierto

 Perfil WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 12:00 am
Mensajes: 1361
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Dom Ene 09, 2011 7:18 am 
Arriba  
En principio no tienes que instalar ningún paquete por ese "error". Tan sólo es un warning que deberías intentar quitar, aunque no es estrictamente necesario. El programa te debería funcionar igual.
El mensaje lo que te dice es que esa conversión (implícita) que estás haciendo no está aconsejada. No soy un experto de c++, y por tanto no sé decirte la razón.

En el enlace que te ha dejado fpuga, básicamente lo que te dice es que cambies el tipo de parámetro en la declaración de la función, de "char *p" a "const char *p". De esa forma ya no te debería mostrar el warning.

_________________
Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)

 Perfil  

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Jue Abr 26, 2007 11:00 pm
Mensajes: 1426

Nota Publicado: Dom Ene 09, 2011 1:57 pm 
Arriba  
Lo que te esta indicando es que esta desaconsejado el uso de char * como sinónimo de string, tienen formas similares pero trabajan de manera diferente.
En C++ existe el tipo string(mira acá), así que podrías reemplazar char * o unsigned char * por string, así:

Código:
sabata::sabata(string reff, string marcaa, string colorr, string modell)
{
   ref = new char[40];
   strcpy(ref,reff);
   marca = new char[40];
   strcpy(marca,marcaa);
   color = new char[40];
   strcpy(color,colorr);
   model = new char[40];
   strcpy(model,modell);
}


Y luego lo invocas así:

Código:
sabata s2("t46t","Kelmo","blanc","guay");


O sino, dejas el código como antes, así:

Código:
sabata::sabata(char *reff, char *marcaa, char *colorr, char *modell)
{
   ref = new char[40];
   strcpy(ref,reff);
   marca = new char[40];
   strcpy(marca,marcaa);
   color = new char[40];
   strcpy(color,colorr);
   model = new char[40];
   strcpy(model,modell);
}


Y luego, para llamar al método, haces casting de tipos, así:

Código:
sabata s2((char *)"t46t", (char *)"Kelmo", (char *)"blanc", (char *)"guay");


Pero este 2° método esta desaconsejado y es mejor el primero.

_________________
"Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit."

"Finibus Bonorum Et Malorum", Cicerón

 Perfil WWW  

Desconectado
Forista Nuevo
Forista Nuevo
Avatar de Usuario

Registrado: Sab Dic 19, 2009 7:33 pm
Mensajes: 36

Nota Publicado: Dom Ene 09, 2011 3:29 pm 
Arriba  
El warning se debe a que estás pasando cadenas constantes a una función que admite char * como parametro, el problema está en que si intentases modificar esas cadenas constantes dentro de la función el resultado seria indefinido, por eso el warning te lo advierte. La solución es cambiar el tipo de parametros que pasas a la función a "const char *" así te ahorras casts innecesarios.

_________________
Just feel the code...

 Perfil Email  
Mostrar mensajes previos:  Ordenar por  
 [ 5 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO