Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿Se pueden definir estructuras extern?

Estas en el tema de ¿Se pueden definir estructuras extern? en el foro de C/C++ en Foros del Web. Hola: Soy nuevo en el foro y quería saludar a los foreros. Llevo ya algo de tiempo programando, pero ahora me ha surgido una duda ...
  #1 (permalink)  
Antiguo 12/05/2011, 05:47
 
Fecha de Ingreso: mayo-2011
Mensajes: 2
Antigüedad: 13 años, 6 meses
Puntos: 0
¿Se pueden definir estructuras extern?

Hola:

Soy nuevo en el foro y quería saludar a los foreros.
Llevo ya algo de tiempo programando, pero ahora me ha surgido una duda que quizá sea muy básica.
Quiero hacer un programa que, para hacer un cálculo, tome los datos que necesite de un archivo de cabecera. Al principio cree una variable struct en una cabecera y también definí algunas variables de esa estructura y les di valor a los datos. De hecho, definí las variables nuevas de esa estructura como extern, y en un .cpp aparte le di valores a aquellas variables.

Al final de todo, en el archivo Main, pasan dos cosas:
cuando quiero llamar a una de esas variables, (no las he vuelto a dar un valor ni definir de nuevo) me da un error de compilación:


Undefined symbols:
"_hydrogen", referenced from:
_hydrogen$non_lazy_ptr in ccaAP39L.o
ld: symbol(s) not found
collect2: ld returned 1 exit status




El problema es que no sé si se pueden definir variables e inicializarlas a un valor en los archivos de cabecera. Tampoco sé si se pueden crear objetos de una clase determinada en un archivo de cabecera, o los objetos tienen que ser creados dentro de la función main.
Mi interés es que todos esos datos ya están cargados con valores en alguna parte, por que son siempre los mismos, sin tener que cargarlos en la función main.

un saludo grande y, si has llegado hasta este linea, muchas gracias por la atención!!


Carnotinlondon
  #2 (permalink)  
Antiguo 14/05/2011, 13:26
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 5 meses
Puntos: 73
Respuesta: ¿Se pueden definir estructuras extern?

En principio, en un archivo de cabecera puedes declarar variables y puedes asignarles valores en la propia declaración, por ejemplo,

float x=1.5;

No obstante, esta práctica no es conveniente. En un archivo de cabecera debe haber solamente definiciones de macros, de estructuras de datos, clases y objetos, y prototipos de funciones.

También parece que no tienes muy claro el empleo del atributo extern. Se utiliza en programas compuestos por varios archivos de código fuente que van a compilarse y enlazarse juntos, para indicar que una variable determinada está declarada en otro de los archivos que componen el programa. En uno de ellos tiene que haber una variable global que sea del mismo tipo y se llame igual, pero sin el atributo extern. Pero, si la declaras en un archivo de cabecera que luego vas a #include en tu programa, no necesitas el atributo extern, declárala normalmente. Repito, no es una buena práctica.

Dado que, de cara al compilador, la directiva #include significa "coge este archivo e insértalo aquí tal cual", cada vez que tengas que cambiar tus datos para hacer un nuevo cálculo tendrías que recompilar el programa, tanto da que declares esas variables en un archivo de cabecera (que, repito por enésima vez, no es conveniente) que dentro de tu programa.

Te sugiero que postees tu código, así sería más fácil darte indicaciones.

Saludos,
  #3 (permalink)  
Antiguo 15/05/2011, 02:39
 
Fecha de Ingreso: mayo-2011
Mensajes: 2
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: ¿Se pueden definir estructuras extern?

Hola:
Muchas gracias por la respuesta y por la paciencia. Creo que ya he resuelto la duda que tenía.

un saludo!

Etiquetas: definir, estructuras
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 08:12.