Viernes 15 de Noviembre de 2024, 08:24
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Uso de estructuras
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Uso de estructuras (Leído 2598 veces)
chuscazo
Nuevo Miembro
Mensajes: 5
Uso de estructuras
«
en:
Martes 24 de Marzo de 2009, 18:11 »
0
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.
Tweet
«
última modificación: Martes 24 de Marzo de 2009, 19:05 por chuscazo
»
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Uso de estructuras
«
Respuesta #1 en:
Martes 24 de Marzo de 2009, 18:45 »
0
¡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
Fr33k K0mpu73r
chuscazo
Nuevo Miembro
Mensajes: 5
Re: Uso de estructuras
«
Respuesta #2 en:
Martes 24 de Marzo de 2009, 19:04 »
0
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
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Uso de estructuras
«
Respuesta #3 en:
Miércoles 25 de Marzo de 2009, 01:42 »
0
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
Fr33k K0mpu73r
chuscazo
Nuevo Miembro
Mensajes: 5
Re: Uso de estructuras
«
Respuesta #4 en:
Miércoles 25 de Marzo de 2009, 09:20 »
0
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.
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Uso de estructuras
«
Respuesta #5 en:
Miércoles 25 de Marzo de 2009, 09:47 »
0
Uf, vaya follón...
Mil disculpas por el despiste, pero tienes razón. Prueba así:
Código: C
ARNameType parametro1
=
"ShortDescription"
;
ARNameType parametro2
=
"Category"
;
ARNameType
*
parametros
[
]
=
{
&
parametro2
,&
parametro1
,
NULL
}
;
ARNameList listaAttr
=
{
2
,
parametros
}
;
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...
«
última modificación: Miércoles 25 de Marzo de 2009, 11:49 por m0skit0
»
Fr33k K0mpu73r
chuscazo
Nuevo Miembro
Mensajes: 5
Re: Uso de estructuras
«
Respuesta #6 en:
Miércoles 25 de Marzo de 2009, 10:23 »
0
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.
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Uso de estructuras
«
Respuesta #7 en:
Miércoles 25 de Marzo de 2009, 10:49 »
0
Pero ¿has probado también las asignaciones independientemente de las declaraciones y tampoco funciona?
Fr33k K0mpu73r
chuscazo
Nuevo Miembro
Mensajes: 5
Re: Uso de estructuras
«
Respuesta #8 en:
Miércoles 25 de Marzo de 2009, 11:08 »
0
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.
Saludos.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Uso de estructuras