Programación General > C/C++

 Uso de estructuras

(1/2) > >>

chuscazo:
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 --- typedef char ARNameType[AR_MAX_NAME_SIZE + 1]; typedef struct ARNameList{   unsigned int   numItems;   ARNameType    *nameList; }  ARNameList;  Y ahora quiero crear una variable del tipo ARNameList con 2 ARNameType q

--- Código: C ---         ARNameType parametro1="ShortDescription";        ARNameType parametro2="Category";         ARNameType *parametros[]={&parametro1,&parametro2,0};         ARNameList listaAttr ={ 2 , &parametros};  Al compilar, la última línea me devuelve:
aviso: inicialización desde un tipo de puntero incompatible.

También he probado:

--- Código: C ---         ARNameType *parametros[]={"Name","ShortDescription",0};        ARNameList listaAttr ={ 2 , &parametros};  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.

m0skit0:
¡UTILIZA LAS PUÑETERAS ETIQUETAS DE CÓDIGO Y LEETE LAS NORMAS DEL FORO!

Tienes mal esto:


--- Código: C ---ARNameType *parametros[]={&parametro1,&parametro2,0}; que debería ser:


--- Código: C ---ARNameType parametros[]={parametro1,parametro2,0}; Recuerda que en C los vectores ya son punteros de por sí.

Salud

chuscazo:
Gracias por tu llamada de atención. Ya he editado el post anterior. Y perdón porque en un principio no me aclare con el editor.

 Lo he cambiado como dices:

--- Código: C ---         ARNameType parametro1="ShortDescription";        ARNameType parametro2="Category";         ARNameType parametros[]={parametro2,parametro1,0};         ARNameList listaAttr ={ 2 , &parametros};   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.

m0skit0:
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

chuscazo:
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 :

--- Código: C ---         ARNameType parametro1="ShortDescription";        ARNameType parametro2="Category";         ARNameType *parametros[]={&parametro2,&parametro1,NULL};         ARNameList listaAttr ={ 2 , &parametros};  Solo me devolvía:
linea 7: inicialización desde un tipo de puntero incompatible

Y con el código modificado como comentas:

--- Código: C ---         ARNameType *parametro1="ShortDescription";        ARNameType *parametro2="Category";         ARNameType parametros[]={parametro2,parametro1,NULL};         ARNameList listaAttr ={ 2 , &parametros};  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.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa