1

je suis en train d'ecrire une librairie, et quand je la compile, j'ai l'erreur suivante :
Linking...
main.obj : error LNK2005: "char * data" (?data@@3PADA) already defined in Camera.obj
main.obj : error LNK2005: "int hauteur" (?hauteur@@3HA) already defined in Camera.obj
main.obj : error LNK2005: "int largeur" (?largeur@@3HA) already defined in Camera.obj

OpenGL.exe - 3 error(s), 0 warning(s)


et je ne vois pas comment la corriger... la description de lalibrairie est la suivante :
/********************************************* **                                          ** ** Classe Camera                             ** **                                          ** **       Ecrit par Laurent Minguet (c) 2003     ** **        http://www.lminguet.freesurf.fr/      ** **                                          ** ** Permet la gestion  d'une Webcam          ** **                                                       ** **********************************************  Version du : 13/03/2004 **********************************************/ #ifndef Camera_h #define Camera_h #include <windows.h>                                   // Librairie de Windows #include <vfw.h>                                        // Librairie "Video For Windows" #include <gl\gl.h>                                        // Librairie OpenGL22 #include <gl\glu.h>                                        // Librairie GLu32 #pragma comment( lib, "vfw32.lib" )                    // Inclusion de VFW32.lib //--- Classe F_WEBCAM class F_WEBCAM { public:      F_WEBCAM();                                             // Constructeur      ~F_WEBCAM();                                        // Destructeur      void Ouvrir(HWND fenetre, int mode=0);          // Ouvrir le périphérique      void Fermer();                                        // Fermer le périphérique      void Lire();                                        // Lire une image      void TextureCreer(GLuint &texture);               // Créer une texture      void TextureChanger(GLuint &texture);          // Mettre à jour une texture      void TextureDetruire(GLuint &texture);          // détruire une texture      void ConfigVideoSource();      void ConfigVideoFormat();      void ConfigVideoDisplay(); private:      CAPDRIVERCAPS          carac ;      HWND                    capvideo;      void                    flipIt(void* buffer);     // Commuter les bytes rouges et bleus      CAPTUREPARMS          capparam ;      HWND                    fenetre; }; LRESULT PASCAL     FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr); int                    largeur;                         // Largeur de la texture int                    hauteur;                         // Hauteur de la texture char*               data;                              // Pointeur vers l'image #endif 

quelqu'un aurait-il une idée ?
Ancien pseudo : lolo

2

C'est normal, tes variables globales sont définies dans le .h, donc elles sont définies deux fois...

Même si certains trouveront ça "sale", tu peux mettre un :
#define GLOBAL_VARIABLE_DECL
dans main, et dans ton .h :
#ifndef GLOBAL_VARIABLE_DECL
#define GLOBAL_VARIABLE_DECL extern
#endif

et rajouter GLOBAL_VARIABLE_DECL devant toutes tes déclarations...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

3

La solution correcte est de mettre les variables dans le .c/.cpp/.cxx/.cc/.C principal et de les déclarer en extern dans le header (sans tous ces hacks de #ifdef que tu proposes).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

Sauf que ça revient qd même exactement au même et que ça évite de se faire chier à déclarer les variables deux fois... J'aime pas trop les gens qui ont une "Right Thing" de laquelle il ne faut surtout pas s'écarter sinon on est damné à jamais, alors qu'en fait il n'y a pas vraiment de raison de penser ça (et il n'y a pas de hacks, ça implique juste de ne pas utiliser "extern" comme modificateur mais autre chose ("GLOBAL_VARIABLE_DECL" par exemple) ) Et puis dans ce cas précis, le seul côté "hacky" est le fait qu'il faut effectivement penser à inclure le header dans le fichier principal; mais si on ne le fait pas, on se prend systématiquement une erreur de compilation, donc ce n'est pas du tout un hack.

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

5

en effet, c ce donc je me suis rendu compte, maintenant ca marche nikel smile
Ancien pseudo : lolo

6

maintenant, h'arrive à contrôler et à récuperer le flux vidéo d'un système d'acquisition
Ancien pseudo : lolo