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 :

[debutant]Multifichier/SDL, Declaration multiple


Sujet :

C

  1. #1
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut [debutant]Multifichier/SDL, Declaration multiple
    Salut à tous

    Je voudrais commencer un petit projet en C/ogl/SDL, mais je bloque dès le début sur une erreur que je ne parviens pas à corriger.

    Voilà mes sources:

    main.c
    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <gl/gl.h>
    #include <gl/glu.h>
    #include "header.h"
     
     
    Ecran screen;
     
    int main (int argc, char *argv[])
    {
        screen.hauteur=600;
        screen.largeur=800;
        screen.profondeur=32;
     
        if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)==-1)
        {
            fprintf(stderr, "An error has occured while loading the SDL lib: %s\n", SDL_GetError());
            exit(EXIT_FAILURE);
            return 0;
        }
     
        if (SDL_SetVideoMode(screen.largeur, screen.hauteur, screen.profondeur, SDL_OPENGL)==NULL)
        {
            fprintf(stderr, "An error has occured while initializing the video/render mode: %s\n", SDL_GetError());
            exit(EXIT_FAILURE);
            return 0;
        }
     
        SDL_WM_SetCaption("A testProgramm", NULL);
     
        intro();
     
    }

    evenements_clavier.c
    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
    include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <gl/gl.h>
    #include <gl/glu.h>
    #include "header.h"
     
     
     
     
    void UpdateEvents()
    {
     
            while(SDL_PollEvent(&event))
            {
                    switch (event.type)
                    {
                    case SDL_KEYDOWN:
                            key[event.key.keysym.sym]=1;
                            break;
                    case SDL_KEYUP:
                            key[event.key.keysym.sym]=0;
                            break;
                    case SDL_MOUSEMOTION:
                            xsouris=event.motion.x;
                            ysouris=event.motion.y;
                            xrelsouris=event.motion.xrel;
                            yrelsouris=event.motion.yrel;
                            break;
                    case SDL_MOUSEBUTTONDOWN:
                            boutons[event.button.button-1]=1;
                            break;
                    case SDL_MOUSEBUTTONUP:
                            boutons[event.button.button-1]=0;
                            break;
                    }
            }
    }
    header.h

    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
    #ifndef DEF_HEADER
    #define DEF_HEADER
     
     
     
    #define TRUE 1
    #define FALSE 0
     
    SDL_Event event;
    char key[400];
    int xsouris=0,xrelsouris=0,yrelsouris=0,ysouris=0;
    char boutons[3]={0,0,0};
     
    typedef struct Ecran Ecran;
    struct Ecran
    {
           int largeur;
           int hauteur;
           int profondeur;
    };
     
    void pause();
    int intro();
    void UpdateEvents();
     
    #endif
    intro.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <gl/gl.h>
    #include <gl/glu.h>
    #include "header.h"
     
    int intro()
    {
       int continuer=TRUE;
       glClearColor(0.0, 0.0, 0.0, 0.0);
       return 0;
    }
    quit.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <gl/gl.h>
    #include <gl/glu.h>
    #include "header.h"
     
    int quit()
    {
         SDL_Quit();
         return 0;    
    }

    et l'erreur c'est :
    multiple definition of `xsouris' first defined here (mais quand on clique ça ne va nulpart) de même pour xrelsouris, yrelsouris, ysouris=0 et boutons

    Merci de m'expliquer, parce que là, je me demande vraiment si le compilo déconne pas (j'utilise devcpp sur windows)


    edit: je viens de me rendre compte que je me suis planté de forum, désolé (si un modo passe par là et qu'il veuille bien le remettre dans C, ce serait sympa, merci )

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Normal, tu déclares des variables dans l'en-tête ce qui fait qu'il y aura ces variables avec ces noms dans chaque fichier objet.

  3. #3
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    Mais je croyais que l'utilisation des conditions préproc #ifndef permettaient justement d'éviter ces inclusions multiples....

    J'ai rien compris ou quoi?? :s

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est vrai pour ne pas avoir de déclaration multiple dans un même fichier. Là, c'est dans plusieurs fichiers qu'il y a les mêmes variables.
    http://c.developpez.com/faq/c/?page=...TYPES_globales

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    ca empêche les inclusions multiples dans le même fichier source, mais pas d'un fichier source à l'autre.

    Résultat, chaque fichier source est bien compilé mais comme chacun a une instance des variables, ça coince à l'édition de liens...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    D'accord ok.

    Je vais essayer de me débrouiller avec ça, merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] debutant confirmation syntaxe declaration macro
    Par nunnu27 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/08/2010, 12h39
  2. Réponses: 8
    Dernier message: 20/09/2006, 15h09
  3. Réponses: 2
    Dernier message: 30/06/2006, 10h51
  4. [debutant] declaration variable
    Par DaxTaz dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/06/2004, 16h59
  5. [Debutant] Sdl & OpenGl link ne marche pas
    Par Riko dans le forum OpenGL
    Réponses: 9
    Dernier message: 18/02/2004, 16h13

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