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

pequeño problema con cabecera en c++

Estas en el tema de pequeño problema con cabecera en c++ en el foro de C/C++ en Foros del Web. Primeramente hola. Ando desarrollando un progama en c++ pero tengo un problema con una cabecera y lo demostraré con un ejemplo simple y claro que ...
  #1 (permalink)  
Antiguo 17/07/2012, 23:12
 
Fecha de Ingreso: julio-2011
Ubicación: Querétaro México
Mensajes: 34
Antigüedad: 8 años, 5 meses
Puntos: 0
Pregunta pequeño problema con cabecera en c++

Primeramente hola.
Ando desarrollando un progama en c++ pero tengo un problema con una cabecera y lo demostraré con un ejemplo simple y claro que no viene del programa que desarrollo, para que se entienda mejor :).

Archivo main.cpp
Cita:
#include <cstdlib>
#include <iostream>
#include "globalVars.h"
using namespace std;
int main ()
{
x=10;
multiplicarX();
cout<<"equis multiplicada ="<<x;
return 0;
}
Archivo globalVars.h
Cita:
#include <cstdlib>
#include <iostream>
int x;
int multiplicarX();


Archivo operaciones.cpp
Cita:
#include <cstdlib>
#include <iostream>
extern int x;
int multiplicarX()
{
x=x*2;
}
Como se ve en el archivo operaciones.cpp utilizo la variable x (declarada en globalVars.h) pero utilizando extern. Mi problema es que en el programa que desarrollo tendía que poner infinidad de extends. pensé en agregar #include "globalVars.h" a operaciones.cpp pero me salta un error por qué se re define todo lo de #include "globalVars.h" como consecuencia de haberla llamado antes en main.cpp.


¿Qué puedo hacer?
  #2 (permalink)  
Antiguo 18/07/2012, 02:01
 
Fecha de Ingreso: julio-2011
Ubicación: Querétaro México
Mensajes: 34
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: pequeño problema con cabecera en c++

Soy un idiota, toda mi vida he vivido equivocado y ahora se que el header sirve para "transportar"por así decirlo las variables y prototipos de funciones a otros archivos de código desde otros archivos de código y no para utilizar dichas definiciones y prototipos desde el header /:.
  #3 (permalink)  
Antiguo 18/07/2012, 05:35
 
Fecha de Ingreso: diciembre-2010
Mensajes: 77
Antigüedad: 9 años
Puntos: 11
Respuesta: pequeño problema con cabecera en c++

Para que no te de el error de que se redefine, debes añadir un "include guard" al header "globalVars.h", seria algo asi :

Código:
#ifndef GLOBAL_VARS_H
#define GLOBAL_VARS_H

#include <cstdlib>
#include <iostream>
int x;
int multiplicarX();

#endif
Como veras es un simple if que comprueba si esta o no esta definido, y lo define en caso de que no este definido, si ya esta definido, no lo define. No se si me explico xD.

Mas info :http://en.wikipedia.org/wiki/Include_guard
Si lo deseas también puedes poner el código de las funciones en las cabeceras, no hay problema, pero es mas ordenado hacerlo en un cpp y dejar solo las definiciones en el header.
__________________
Convert JSON to CSV
  #4 (permalink)  
Antiguo 18/07/2012, 06:09
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 9 años, 6 meses
Puntos: 73
Respuesta: pequeño problema con cabecera en c++

Entiendo que esa x es una misma variable que debe ser conocida por varios módulos de programa dentro del mismo proyecto. Si es así, entonces:

1. Declárala como extern en el archivo globalVars.h.

2. En alguno de los módulos que componen el proyecto deberá estar declarada normalmente. Esta declaración deberá ser posterior a #include "globalVars.h"

3. Una pequeña sugerencia: Cuando hagas cosas de este tipo, da a esas variables compartidas un nombre un poco más descriptivo que, simplemente, x.

Por ejemplo:

Archivo globalVars.h:

Código C++:
Ver original
  1. // Estos dos #include no los necesitas aquí si los vas a incluir en los demás módulos de programa
  2. #include <cstdlib>
  3. #include <iostream>
  4.  
  5. extern int x;           // Aquí es donde declaras x como extern
  6.  
  7. int multiplicarX();

Archivo Operaciones.cpp:

Código C++:
Ver original
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include "globalVars.h"
  4.  
  5. // extern int x ya está declarada en globalVars.h
  6.  
  7. int multiplicarX()
  8. {
  9. x=x*2;
  10. }

Archivo OtroArchivo.cpp:

Código C++:
Ver original
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include "globalVars.h"
  4.  
  5. // Aquí es donde implementas realmente la variable x
  6. int x;
  7.  
  8. ...
  #5 (permalink)  
Antiguo 19/07/2012, 06:05
Avatar de sephirot47  
Fecha de Ingreso: marzo-2011
Ubicación: BCN
Mensajes: 54
Antigüedad: 8 años, 9 meses
Puntos: 9
Respuesta: pequeño problema con cabecera en c++

Usa #pragma once o lo tipico de:

Código C++:
Ver original
  1. #ifndef BLA
  2. #define BLA
  3.  
  4. //todo el código
  5.  
  6. #endif

, que es lo mismo que #pragma once. Es simplemente para que no se repita el código de ese header.
__________________
Todo lo que tiene un inicio tiene un final inevitable...

¡ No olvides darme karma si te fui útil ^^ !

Etiquetas: cabeceras, definir, externos, ficheros
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 13:08.