Hola, ando haciendo un programa para mis clases de Programacion basica, lo he terminado pero no entiendo porque me bota un warning en esta funcion
char* Item_Name(int Item){
char* ItemName[10];
ItemName[0] = "Producto 1";
ItemName[1] = "Producto 2";
ItemName[2] = "Producto 3";
ItemName[3] = "Producto 4";
ItemName[4] = "Producto 5";
ItemName[5] = "Producto 6";
ItemName[6] = "Producto 7";
ItemName[7] = "Producto 8";
ItemName[8] = "Producto 9";
ItemName[9] = "Producto 10";
//Retorna el Nombre del Producto Item
return ItemName[Item-1];
};
Les agradeceria su Colaboracion aunque el programa funcione quiero quitarle ese warning :3 utilizo Code Blocks
Cita de: jonniemaxxx en 24 Mayo 2014, 03:52 AM
Hola, ando haciendo un programa para mis clases de Programacion basica, lo he terminado pero no entiendo porque me bota un warning en esta funcion
char* Item_Name(int Item){
char* ItemName[10];
ItemName[0] = "Producto 1";
ItemName[1] = "Producto 2";
ItemName[2] = "Producto 3";
ItemName[3] = "Producto 4";
ItemName[4] = "Producto 5";
ItemName[5] = "Producto 6";
ItemName[6] = "Producto 7";
ItemName[7] = "Producto 8";
ItemName[8] = "Producto 9";
ItemName[9] = "Producto 10";
//Retorna el Nombre del Producto Item
return ItemName[Item-1];
};
Les agradeceria su Colaboracion aunque el programa funcione quiero quitarle ese warning :3 utilizo Code Blocks
¿En que linea exactamente? En la asinación de los punteros? o en el retorno?
de todas maneras simplemente hacer un casting o hacer la declaracion de la variable como constante aunque esa manera de obtener el puntero
no me gusta porqué no crear un array de punteros global?
o sea de la linea 3 a la linea 12 hahaha como lo harias tu ? ando algo perdido y si en la asignacion
Cita de: jonniemaxxx en 24 Mayo 2014, 04:27 AM
o sea de la linea 3 a la linea 12 hahaha como lo harias tu ? ando algo perdido y si en la asignacion
Simplemente crear el array:
const char* ItemName[] = {
"Producto 1",
"Producto 2",
"Producto 3",
"Producto 4",
"Producto 5",
"Producto 6",
"Producto 7",
"Producto 8",
"Producto 9",
"Producto 10"
};
char* Item_Name(int Item){
// validate it
if(Item <= sizeof(ItemName) / sizeof(ItemName[0]))
{
return ItemName[Item-1];
}
return NULL;
};
Cita de: jonniemaxxx en 24 Mayo 2014, 03:52 AMno entiendo porque me bota un warning en esta funcion
char* Item_Name(int Item)
{
char* ItemName[10];
ItemName[0] = "Producto 1";
ItemName[1] = "Producto 2";
// ...
return ItemName[Item-1];
};
Se presenta el mensaje de advertencia porque en C++ una cadena literal como "Producto 1" es de tipo "const char [N]" y este, en las asignaciones y sentencia de retorno, genera un valor de tipo "const char *". El problema es que los tipos no coinciden ya que tanto la función como los elementos del array los declaras de tipo "char *" (sin el calificador const).
Una solución ya la indico
x64Core, otra opción es simplemente utilizar el tipo correcto:
const char *Item_Name(int Item)
{
const char *ItemName[10];
ItemName[0] = "Producto 1";
ItemName[1] = "Producto 2";
// ...
return ItemName[Item - 1];
}
Un saludo
Oye muchas gracias ahora si :D esa respuesta es mas acorde con mi nivel actual de conocimiento :D jaja