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

Acceder a variable extern desde otro archivo

Estas en el tema de Acceder a variable extern desde otro archivo en el foro de C/C++ en Foros del Web. Bueno, tengo estos archivos: utility.h @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original extern static unsigned int global_id = 0 ; item.cpp @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver ...
  #1 (permalink)  
Antiguo 21/03/2013, 14:24
 
Fecha de Ingreso: abril-2011
Mensajes: 224
Antigüedad: 12 años, 11 meses
Puntos: 8
Acceder a variable extern desde otro archivo

Bueno, tengo estos archivos:

utility.h
Código C++:
Ver original
  1. extern static unsigned int global_id = 0;

item.cpp
Código C++:
Ver original
  1. #include "item.h"
  2. #include "utility.h"
  3.  
  4. id_t getUniversalId()
  5. {
  6.     return global_id++;
  7. }
  8.  
  9. Item::Item()
  10. {
  11.     // Genera el id Correcto
  12.     id = getUniversalId();
  13.  
  14.     // Necesita nombrarse el item
  15.     name = "UNDEFINED NAME";
  16.  
  17.     // Establece el precio del producto en 0.00
  18.     price = 0;
  19. }

Pero me da error en la función getUniversalId(), a qué se debe esto?

O de qué otro modo podría tener una variable general estática que se aumente en 1 cada que se cree un nuevo objeto Item, y al que puedan acceder diversos objetos en diversos archivos fuente?

Saludos.
  #2 (permalink)  
Antiguo 21/03/2013, 14:46
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 8 meses
Puntos: 28
Respuesta: Acceder a variable extern desde otro archivo

Prueba a quitar el extern y dejarlo solo con el static.
  #3 (permalink)  
Antiguo 21/03/2013, 17:15
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Acceder a variable extern desde otro archivo

Hola! el modificador extern se utiliza cuando se quiere acceder a una variable que fue creado desde otro archivo, pero no cuando se crea la variable. Por lo tanto en utility.h no debias haber usado "extern"
La combinacion "extern static" creo q no es valida(y si lo fuese no tiene mucho sentido). Si solo hubieras usado static para crear la variable global_id, lo que harias es limitar el alcance de dicha variable, haciendola invisible a otros archivos(lo cual no es tu objetivo)...


Resumiendo:
utility.h
Código C:
Ver original
  1. unsigned int global_id = 0; /* variable global */

item.cpp
Código C:
Ver original
  1. #include "item.h"
  2.     #include "utility.h"
  3.      extern global_id;
  4.     id_t getUniversalId()
  5.     {
  6.         return global_id++;
  7.     }
  8.      
  9.     Item::Item()
  10.     {
  11.         // Genera el id Correcto
  12.         id = getUniversalId();
  13.      
  14.         // Necesita nombrarse el item
  15.         name = "UNDEFINED NAME";
  16.      
  17.         // Establece el precio del producto en 0.00
  18.         price = 0;
  19.     }

Saludos
  #4 (permalink)  
Antiguo 22/03/2013, 00:33
 
Fecha de Ingreso: abril-2011
Mensajes: 224
Antigüedad: 12 años, 11 meses
Puntos: 8
Respuesta: Acceder a variable extern desde otro archivo

Cita:
Iniciado por cesar_casla Ver Mensaje
Hola! el modificador extern se utiliza cuando se quiere acceder a una variable que fue creado desde otro archivo, pero no cuando se crea la variable. Por lo tanto en utility.h no debias haber usado "extern"
La combinacion "extern static" creo q no es valida(y si lo fuese no tiene mucho sentido). Si solo hubieras usado static para crear la variable global_id, lo que harias es limitar el alcance de dicha variable, haciendola invisible a otros archivos(lo cual no es tu objetivo)...


Resumiendo:
utility.h
Código C:
Ver original
  1. unsigned int global_id = 0; /* variable global */

item.cpp
Código C:
Ver original
  1. #include "item.h"
  2.     #include "utility.h"
  3.      extern global_id;
  4.     id_t getUniversalId()
  5.     {
  6.         return global_id++;
  7.     }
  8.      
  9.     Item::Item()
  10.     {
  11.         // Genera el id Correcto
  12.         id = getUniversalId();
  13.      
  14.         // Necesita nombrarse el item
  15.         name = "UNDEFINED NAME";
  16.      
  17.         // Establece el precio del producto en 0.00
  18.         price = 0;
  19.     }

Saludos
Hice esto y me da el siguiente error al compilar con g++ -c item.cpp:

Código:
item.cpp:3:12: error: ‘global_id’ does not name a type
¿A qué se debe esto?

Saludos.
  #5 (permalink)  
Antiguo 22/03/2013, 02:52
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 9 meses
Puntos: 73
Respuesta: Acceder a variable extern desde otro archivo

Debe ser:

Código C:
Ver original
  1. extern <tipo> global_id;

donde <tipo> debe coincidir con el tipo con el que se haya declarado global_id (en este caso, por ejemplo, unsigned int).

Y, en efecto, extern static no tiene sentido. Además, una variable que vaya a verse como extern desde otros módulos de programa no puede haber sido declarada con el atributo static en el módulo que sea su "propietario".

Si lo que quieres es, simplemente, saber el número de objetos creados, en lugar de ir guardando este dato en una variable global para todos los módulos de tu programa (variable que puede modificarse desde cualquier módulo), será más seguro crearla como static en el módulo en el que tienes el constructor, añade también una función que te devuelva el valor de esa variable (que incrementarás/decrementarás cada vez que generes/destruyas un nuevo objeto). Sería una sencilla modificación sobre lo que ya tienes en item.cpp:

Código C:
Ver original
  1. #include "item.h"
  2. #include "utility.h"
  3.  
  4. static unsigned int globai_id = 0;
  5.  
  6. id_t getUniversalId()
  7. {
  8.     return global_id;
  9. }
  10.  
  11. Item::Item()
  12. {
  13.     // Incremento el contador de objetos generados
  14.     global_id++;
  15.  
  16.     // Necesita nombrarse el item
  17.     name = "UNDEFINED NAME";
  18.  
  19.     // Establece el precio del producto en 0.00
  20.     price = 0;
  21. }
  22.  
  23. // Y, logicamente, hacer el correspondiente decremento en el destructor
  #6 (permalink)  
Antiguo 22/03/2013, 12:38
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Acceder a variable extern desde otro archivo

Cita:
Hice esto y me da el siguiente error al compilar con g++ -c item.cpp:

Código:

item.cpp:3:12: error: ‘global_id’ does not name a type
me equivoque al tipiar(todo por hacer copy&paste donde no se debe).. El error se debe por lo q marco Fw190, me olvide de poner el tipo de dato de la variable:

item.cpp
Código C:
Ver original
  1. #include "item.h"
  2.     #include "utility.h"
  3.      extern unsigned int global_id; /* forma correcta xD */
  4.  
  5. /* ......... */


Saludos

Etiquetas: int, variable
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




La zona horaria es GMT -6. Ahora son las 19:14.