Programación General => C/C++ => Mensaje iniciado por: chuscazo en Martes 24 de Marzo de 2009, 18:11
Título: Uso de estructuras
Publicado por: chuscazo en Martes 24 de Marzo de 2009, 18:11
Uso de estructuras Hola, soy medio novato en C, entre otras cosas porque hace bastante tiempo que no me tocaba hacer nada en este lenguaje. Me estoy matando con 2 lineas de código que no acabo de entender. Os comento (es de una API para Remedy):
Tengo definidos:
Código: C
typedefchar ARNameType[AR_MAX_NAME_SIZE +1];
typedefstruct ARNameList
{
unsignedint numItems;
ARNameType *nameList;
} ARNameList;
Y ahora quiero crear una variable del tipo ARNameList con 2 ARNameType q
Pero ahora la dos lineas me devuelven: linea 2: aviso: inicialización desde un tipo de puntero incompatible. linea 2: aviso: inicialización desde un tipo de puntero incompatible. linea 3: aviso: inicialización desde un tipo de puntero incompatible.
¿Alguien me podría decir que está mal?
Gracias.
PD: EDITADO para añadir la etiquetas correctas de código.
Título: Re: Uso de estructuras
Publicado por: m0skit0 en Martes 24 de Marzo de 2009, 18:45
¡UTILIZA LAS PUÑETERAS ETIQUETAS DE CÓDIGO Y LEETE LAS NORMAS DEL FORO!
Ahora me dice: linea 5: aviso: la inicialización crea un entero desde un puntero sin una conversión linea 5: aviso: la inicialización crea un entero desde un puntero sin una conversión linea 7: aviso: inicialización desde un tipo de puntero incompatible
La verdad que he probado muchas cosas y no se si me está fallando el código aquí porque son solo avisos. El caso que esa estructura se la tengo que pasar por referencia a una función de la api y parece que nunca me coge mas de un valor en la lista. Según la documentación si debería de cogerlos.
Saludos.
Título: Re: Uso de estructuras
Publicado por: m0skit0 en Miércoles 25 de Marzo de 2009, 01:42
Podrías haberte dado cuenta por ti mismo, pero aquí también incurres en el mismo error:
Código: C
ARNameType parametro1="ShortDescription";
ARNameType parametro2="Category";
Aqui estás asignando una cadena a un puntero. Debería ser:
Código: C
ARNameType *parametro1="ShortDescription";
ARNameType *parametro2="Category";
Aquí asignamos las cadenas a la memoria apuntada por los punteros, que previamente hemos reservado con [AR_MAX_NAME_SIZE + 1].
Por cierto, para los punteros usa NULL en vez de 0 para asegurarte la portabilidad (aunque en la inmensa mayoría sea 0)
Salud
Título: Re: Uso de estructuras
Publicado por: chuscazo en Miércoles 25 de Marzo de 2009, 09:20
Curioso, porque yo pensaba que esa parte estaba bien. El caso es que cambiando lo que me comentas me sale 2 veces mas el error.
La verdad que cada vez me pierdo mas. porque con el código inicial :
Me devuelve: linea 2: inicialización desde un tipo de puntero incompatible linea 3: inicialización desde un tipo de puntero incompatible linea 5: la inicialización crea un entero desde un puntero sin una conversión linea 5: la inicialización crea un entero desde un puntero sin una conversión linea 7: inicialización desde un tipo de puntero incompatible
Me comentas que me tendría que haber dado cuenta, pero es que esto hace que me desoriente más todavía.
Título: Re: Uso de estructuras
Publicado por: m0skit0 en Miércoles 25 de Marzo de 2009, 09:47
Uf, vaya follón... <_< Mil disculpas por el despiste, pero tienes razón. Prueba así:
También, ¿por qué no pruebas a asignar los valores después de la declaración?
Código: C
ARNameType parametro1;
ARNameType parametro2;
ARNameType *parametros[];
ARNameList listaAttr;
*parametro1="ShortDescription";
*parametro2="Category";
parametros[0]= parametro2;
parametros[1]= parametro1;
parametros[2]= NULL;
listaAttr.numItems=2;
listaAttr.namelist= parametros;
Vemos a ver qué tal. Disculpa por haberte liado tanto... :bad:
Título: Re: Uso de estructuras
Publicado por: chuscazo en Miércoles 25 de Marzo de 2009, 10:23
Nada tío, así tampoco, siguen saliendo los mismo errores y he probado varias combinaciones.
Lo he escalado al soporte de la herramienta (la que trae la API) a ver si se estiran y me ayudan o me dicen que es lo que pasa, porque mas combinaciones no pudo probar. También es un problema que no sea utilizado por mucha gente, porque no hay muchos hilos sobre esto.
Muchas gracias por tu tiempo, ayuda e ideas. En cuanto sepa algo de lo que pasa lo pondré en este hilo. De todas formas si se os siguen ocurriendo ideas yo estaré aquí detrás a la espera.
Saludos.
Título: Re: Uso de estructuras
Publicado por: m0skit0 en Miércoles 25 de Marzo de 2009, 10:49
Pero ¿has probado también las asignaciones independientemente de las declaraciones y tampoco funciona? :huh:
Título: Re: Uso de estructuras
Publicado por: chuscazo en Miércoles 25 de Marzo de 2009, 11:08
Claro, y también salen errores y avisos. En esa asignación es donde he hecho varias pruebas ya que de esa forma no había probado todavía.
De todas formas si que consigo crear la estructura y acceder a ella, aunque con avisos en la asignación, pero lo que parece que luego no funciona bien es el uso que hace de ella otra función de la API.