Problema con Include

Iniciado por MCKSys Argentina, 20 Enero 2015, 00:16 AM

0 Miembros y 2 Visitantes están viendo este tema.

MCKSys Argentina

Bueno, estoy teniendo problemas a la hora de incluir un header en varios files. He revisado este post y despues de probar (casi) todas las combinaciones enunciadas ahí, sigo con el problema.

Ni hablar que he estado en varios post de la inet, los cuales aconsejan casi lo mismo que en el post anterior, pero no me está funcionando.

Para hacerlo sencillo, expongo lo que tengo:
Tengo 3 archivos: f1.cpp. f2.cpp y f2.h.

Ambos CCPs hacen un include de f2.h:

f1.cpp
Código (c++) [Seleccionar]
#include "f2.h"

int main(){
aNumber = 1;
globalNumber = aNumber + aUnsignedNumber;
return globalNumber;
}


f2.cpp
Código (c++) [Seleccionar]
#include "f2.h"

void nada(){
aUnsignedNumber = 2;
}


f2.h:
Código (c++) [Seleccionar]
#pragma once

int aNumber; //variable usada en f1.cpp
unsigned int aUnsignedNumber; //variable usada en f2.cpp
int globalNumber; //Variable global usada en ambos CPPs


Estoy en Visual Studio 2013 y al compilar sale:


1>------ Build started: Project: Hola, Configuration: Debug Win32 ------
1>  f1.cpp
1>  Note: including file: e:\proyectos\visualstudio\projects\hola\hola\f2.h
1>f2.obj : error LNK2005: "int aNumber" (?aNumber@@3HA) already defined in f1.obj
1>f2.obj : error LNK2005: "unsigned int aUnsignedNumber" (?aUnsignedNumber@@3IA) already defined in f1.obj
1>f2.obj : error LNK2005: "int globalNumber" (?globalNumber@@3HA) already defined in f1.obj
1>E:\Proyectos\VisualStudio\Projects\Hola\Debug\Hola.exe : fatal error LNK1169: one or more multiply defined symbols found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


He probado colocar #pragma once en cada .cpp y no funciona. También probé usando #ifndef en f2.h (y en ambos .cpp también) y no funciona.

Cualquier ayuda es bienvenida.

PD: En realidad, la estructura que tengo es mas compleja, pero creo que lo anterior es la base del problema. Los CPPs son más y usan tipos de windows.h y demás headers, los cuales incluyo en el .h.
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Eternal Idol

extern en las variables en el archivo de cabecera, despues en un solo archivo de codigo la definis.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

MCKSys Argentina

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón