IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Error Multiple Declaration Of


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Par défaut Error Multiple Declaration Of
    Bonjour,

    Je réalise un projet en OpenGL / C pour la réalisation d'un morpion.

    Pour commencer sur de bonne base j'ai voulu déclaré mes variables qui seront utilisées dans plusieurs fichiers .c dans un .h.

    Je suis en présence d'un problème de redondance de déclarations pourtant j'ai bien encadré mes fichiers .h du IFNDEF.

    multiple definition of `ex' par exemple.

    Par ailleurs si vous avez des remarques qui me permettraient d'avoir une meilleur structure ou autres je suis preneur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    #ifndef _EXTERN_
    #define _EXTERN_
     
    // POSITION DE LA FENETRE
    #define POS_FENETRE_X 100
    #define POS_FENETRE_Y 100
     
    // TAILLE DE LA FENETRE
    #define TAILLE_FENETRE_X 500
    #define TAILLE_FENETRE_Y 500
     
    // CAMERA
    # define CAM_ANGLE 120
    # define CAM_FEAR 20
    # define CAM_NEAR 1
     
    // TYPE BOOLEAN
    typedef enum { false, true } bool;
     
    // TYPE JOUEUR
     
    typedef struct Joueur joueur;
    struct Joueur{
        int score;
        char pseudo[100];
        bool gagnant;
        bool aJouer;
    };
     
    extern joueur joueur1 = {0, "",false, false};
    extern joueur joueur2 = {0, "",false, false};
     
    // PARTI
    extern bool parti_fini = false;
     
    extern float angle=0.0;
    extern float ex=0.0;
    extern float ey=0.0;
    extern float ez=-4.0;
    extern float scalex = 5.0;
    extern float scaley = 5.0;
    extern float scalez = 5.0;
     
    #endif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #ifndef _JOUEUR /* L'écriture ici présente n'est pas universelle */
    #define _JOUEUR /* Edit suite aux corrections des posts suivants -> */
    /*Il est conseillé d'utiliser MON_FICHIER : pas de underscore au début */
    /* Tu places ici les prototypes de tes fonctions */
     
    #include "var.h"
    //joueur initJoueur();
     
    #endif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    #include <GL/glut.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    #include "morpion.h"
    #include "var.h"
    #include "joueur.h"
     
    void init(void)
    {
       glClearColor (0.2, 0.2, 0.2, 0);
       glEnable (GL_DEPTH_TEST);
    }
     
    void display(void)
    {
        glLoadIdentity ();
        gluLookAt (ex, ey, ez, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
        glClear (GL_COLOR_BUFFER_BIT);
        glClear (GL_DEPTH_BUFFER_BIT);
     
        glRotatef(angle,0,1,0);
        glPushMatrix();
    	plateau();
    	glPopMatrix();
     
        glutSwapBuffers();
    }
     
    void mon_timer(int val)
    {
       angle=angle+1;
       if (angle==360)
            angle=0;
     
       glutTimerFunc(20,mon_timer,1);
       glutPostRedisplay();
    }
     
    void keyboard(unsigned char key, int x, int y)
    {
       switch (key) {
          case 'x':
             ex=ex+0.05;
             break;
          case 'X':
             ex=ex-0.05;
             break;
          case 'y':
             ey=ey+0.05;
             break;
          case 'Y':
             ey=ey-0.05;
             break;
          case 'z':
             ez=ez+0.05;
             break;
          case 'Z':
             ez=ez-0.05;
             break;
          case 27:
             exit(0);
             break;
       }
       glutPostRedisplay();
    }
     
     
    void reshape (int w, int h) // champs de vision
    {
       glViewport (0, 0, (GLsizei) w, (GLsizei) h);
       glMatrixMode (GL_PROJECTION);
       glLoadIdentity ();
       gluPerspective(CAM_ANGLE,w/h,CAM_NEAR,CAM_FEAR);
       glMatrixMode (GL_MODELVIEW);
    }
     
    int main(int argc, char** argv)
    {
        glutInit(&argc, argv);
        glutInitDisplayMode (GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
        glutInitWindowSize (TAILLE_FENETRE_X, TAILLE_FENETRE_Y);
        glutInitWindowPosition (POS_FENETRE_X, POS_FENETRE_Y);
        glutCreateWindow (argv[0]);
     
        init ();
        glutTimerFunc(20, mon_timer, 1);
        glutDisplayFunc(display);
        glutReshapeFunc(reshape);
        glutKeyboardFunc(keyboard);
     
        glutMainLoop();
        return 0;
    }

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Cela ne devrait pas se produire avec ce que l'on a sous les yeux. Quel est ton système ? Quel compilateur utilises-tu ?

    Une remarque non liée : les noms commençant par un underscore _, qu'ils identifient des symboles, des variables, des fonctions ou des types sont réservés pour le compilateur et ne doivent pas être utilisés si tu ne veux pas avoir de mauvaise surprise un jour. C'est d'ailleurs mentionné dans un commentaire de l'un de tes headers.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Par défaut
    Merci de ta réponse rapide.

    J'ai en effet effectué un maximum de test.

    J'ai pu lire sur différent forums que le extern placé devant permettaient au même titre que le ifndef d'avoir une implémentation unique.

    Pour compiler j'utilise sous Linux l' IDE Code Block avec GNU GCC Compiler et dans linkers options -lGL -lGLU -lglut -lX11 -lm

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Par défaut
    Une image du compilateur
    Images attachées Images attachées  

  5. #5
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Les lignes indiquées par le compilateur ne correspondent pas à ton fichier. Je ne sais pas ce que l'IDE tente de compiler mais ça ne semble pas être ton main.c .

    Ouvres un terminal et essaies de compiler directement en ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -std=c11 -pedantic -Wall -Wextra -c main.c

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    quentin@ubuntu:~/Morpion_OpenGL/Morpion$ gcc -std=c11 -pedantic -Wall -Wextra -c main.c
    In file included from main.c:7:0:
    var.h:30:15: warning: ‘joueur1’ initialized and declared ‘externextern joueur joueur1 = {0, "",false, false};
                   ^
    var.h:31:15: warning: ‘joueur2’ initialized and declared ‘externextern joueur joueur2 = {0, "",false, false};
                   ^
    var.h:34:13: warning: ‘parti_fini’ initialized and declared ‘externextern bool parti_fini = false;
                 ^
    var.h:36:14: warning: ‘angle’ initialized and declared ‘externextern float angle=0.0;
                  ^
    var.h:37:14: warning: ‘ex’ initialized and declared ‘externextern float ex=0.0;
                  ^
    var.h:38:14: warning: ‘ey’ initialized and declared ‘externextern float ey=0.0;
                  ^
    var.h:39:14: warning: ‘ez’ initialized and declared ‘externextern float ez=-4.0;
                  ^
    var.h:40:14: warning: ‘scalex’ initialized and declared ‘externextern float scalex = 5.0;
                  ^
    var.h:41:14: warning: ‘scaley’ initialized and declared ‘externextern float scaley = 5.0;
                  ^
    var.h:42:14: warning: ‘scalez’ initialized and declared ‘externextern float scalez = 5.0;
                  ^
    main.c: In function ‘mon_timer’:
    main.c:31:20: warning: unused parameter ‘val’ [-Wunused-parameter]
     void mon_timer(int val)
                        ^
    main.c: In function ‘keyboard’:
    main.c:41:38: warning: unused parameter ‘x’ [-Wunused-parameter]
     void keyboard(unsigned char key, int x, int y)
                                          ^
    main.c:41:45: warning: unused parameter ‘y’ [-Wunused-parameter]
     void keyboard(unsigned char key, int x, int y)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    -------------- Build: Debug in Morpion (compiler: GNU GCC Compiler)---------------
     
    gcc -Wall -g  -c /home/quentin/Morpion_OpenGL/Morpion/joueur.c -o obj/Debug/joueur.o
    In file included from /home/quentin/Morpion_OpenGL/Morpion/joueur.h:6:0,
                     from /home/quentin/Morpion_OpenGL/Morpion/joueur.c:4:
    g++  -o bin/Debug/Morpion obj/Debug/joueur.o obj/Debug/main.o obj/Debug/morpion.o  -lGL -lGLU -lglut -lX11 -lm  -lGL -lX11
    obj/Debug/main.o:(.bss+0x0): multiple definition of `joueur1'
    obj/Debug/joueur.o:(.bss+0x0): first defined here
    obj/Debug/main.o: In function `display':
    /home/quentin/Morpion_OpenGL/Morpion/main.c:19: multiple definition of `joueur2'
    obj/Debug/joueur.o:(.bss+0x80): first defined here
    obj/Debug/main.o: In function `mon_timer':
    /home/quentin/Morpion_OpenGL/Morpion/main.c:33: multiple definition of `parti_fini'
    obj/Debug/joueur.o:(.bss+0xf0): first defined here
    obj/Debug/main.o: In function `mon_timer':
    /home/quentin/Morpion_OpenGL/Morpion/main.c:33: multiple definition of `angle'
    obj/Debug/joueur.o:(.bss+0xf4): first defined here
    obj/Debug/main.o: In function `mon_timer':
    /home/quentin/Morpion_OpenGL/Morpion/main.c:33: multiple definition of `ex'
    obj/Debug/joueur.o:(.bss+0xf8): first defined here
    obj/Debug/main.o: In function `mon_timer':
    /home/quentin/Morpion_OpenGL/Morpion/main.c:33: multiple definition of `ey'
    obj/Debug/joueur.o:(.bss+0xfc): first defined here
    obj/Debug/main.o: In function `init':
    /home/quentin/Morpion_OpenGL/Morpion/main.c:11: multiple definition of `ez'
    obj/Debug/joueur.o:(.data+0x0): first defined here
    obj/Debug/main.o: In function `init':
    /home/quentin/Morpion_OpenGL/Morpion/main.c:12: multiple definition of `scalex'
    obj/Debug/joueur.o:(.data+0x4): first defined here
    obj/Debug/main.o: In function `init':
    /home/quentin/Morpion_OpenGL/Morpion/main.c:12: multiple definition of `scaley'
    obj/Debug/joueur.o:(.data+0x8): first defined here
    obj/Debug/main.o: In function `init':
    /home/quentin/Morpion_OpenGL/Morpion/main.c:12: multiple definition of `scalez'
    obj/Debug/joueur.o:(.data+0xc): first defined here
    collect2: error: ld returned 1 exit status
    Process terminated with status 1 (0 minute(s), 0 second(s))
    9 error(s), 20 warning(s) (0 minute(s), 0 second(s))
    Build log je ne sais pas pourquoi mon IDE compile avec du gcc et ensuite du g++...

Discussions similaires

  1. Error multiple definition
    Par guilermo dans le forum Débuter
    Réponses: 4
    Dernier message: 29/09/2009, 13h36
  2. Réponses: 3
    Dernier message: 14/05/2009, 14h19
  3. error : must declare a scalaire variable
    Par ravaid dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/06/2008, 11h52
  4. on error multiple
    Par maxtin dans le forum Général VBA
    Réponses: 2
    Dernier message: 11/10/2007, 00h32
  5. Multiple declaration of "objet_geo"
    Par n00bi dans le forum C++
    Réponses: 4
    Dernier message: 17/11/2005, 21h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo