LNK2005 et LNK1169

cs_fuliculi Messages postés 43 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 3 mai 2010 - 26 oct. 2004 à 18:55
cs_fuliculi Messages postés 43 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 3 mai 2010 - 27 oct. 2004 à 09:48
Bonjour à tous et à toute,

je bloque sur un problème de linkage qui semble trivial, j'ai les messages suivants :

main.obj : error LNK2005: "class Ccamera gCam" (?gCam@@3VCcamera@@A) already defined in load_scene.obj
Release/Raytracing.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

mon programme est organisé ainsi :

main.cpp :
#include <global.h>
#include <load_scene.h>
...

load_scene.cpp :
#include <global.h>
#include <load_scene.h>
...

<global.h>
#ifndef _CAMERA_H_
#define _CAMERA_H_
#include <camera.h>
Ccamera gCam;
#endif

C'est un simple fichier de variables globales (une seule pour le moment...)

je fais un essai avec une seule variable et ça plante dessus.
Désolé de ne pas mettre le code entier, y'en a pour quelque milliers de lignes (raytracing oblige) et quelques centaines pour les fichiers nommés.

Quelqu'un connait une solution simple? J'ai cherché dans le forum, je n'ai pas trouvé de réponse à ce même problème.

3 réponses

cs_fuliculi Messages postés 43 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 3 mai 2010 6
26 oct. 2004 à 19:10
Loi de Murphy oblige...
Après plusieurs mois de recherche, c'est forcement 2mn après avoir posté ce post que je trouve 'une ' solution...

main.cpp :
#include <global.h>
#include <load_scene.h>
...

load_scene.cpp :
#include <load_scene.h>
#include <camera.h> <--------- A la place de #include <global.h>
extern gCam <----------- Nouvelle ligne
...

<global.h>
#ifndef _CAMERA_H_
#define _CAMERA_H_
#include <camera.h>
Ccamera gCam;
#endif

En esperant que ça puisse aider quelqu'un...
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
27 oct. 2004 à 08:58
Il faut surtout éviter de déclarer des variables dans des .h, ainsi tu évitera ces problèmes. Pour partager une variable globale, il faut la déclarer dans un .c/cpp et pour les autres modules qui veulent y accéder, il faut la déclarer en tant que extern.
0
cs_fuliculi Messages postés 43 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 3 mai 2010 6
27 oct. 2004 à 09:48
Merci pour l'info, pour le moment j'ai tout mis dans un *.h et ça marche comme ça. Si y'a soucis, je repasserais tout dans un *.cpp
Le seul inconvénient est la tonne de extern en début de *.cpp quand j'ai 20 variables globales, mais bon, ça rend le programme plus clean quand même. En plus, ça m'a viré 1 warning de Purify ;)
0
Rejoignez-nous