Programación General > C/C++
Uso de estructuras
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[]={¶metro1,¶metro2,0}; ARNameList listaAttr ={ 2 , ¶metros}; 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 , ¶metros}; 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[]={¶metro1,¶metro2,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 , ¶metros}; 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[]={¶metro2,¶metro1,NULL}; ARNameList listaAttr ={ 2 , ¶metros}; 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 , ¶metros}; 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
[#] Página Siguiente
Ir a la versión completa