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 :

Multiple Definition d'une fonction SDL


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Par défaut Multiple Definition d'une fonction SDL
    Bonjours, je débute en C++. Ayant utilisé SDL en C je me décide à faire un petit essais en C++.
    Malheuresement mon compilateur vois rouge avec ce petit programme:

    Le main:
    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
    #include <cstdlib>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <string>
    #include "fonctions.h"
     
    int main ( int argc, char** argv )
    {
        SDL_Surface* ecran = NULL;
        SDL_Surface* message = NULL;
     
        SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER);
     
        ecran = SDL_SetVideoMode(640,480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
     
        message = load_image("cb.bmp");
        apply_surface(0,0,message,ecran);
     
        SDL_Delay(1000);
        SDL_FreeSurface(message);
        SDL_Quit();
        return 0;
    }
    Le fonctions.cpp
    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
    #include <cstdlib>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <string>
     
    SDL_Surface *load_image(std::string filename)
    {
        SDL_Surface* loadedImage = NULL;
        SDL_Surface* optimizedImage = NULL;
     
        loadedImage = SDL_LoadBMP(filename.c_str());
     
        if (loadedImage != NULL)
            {
                optimizedImage = SDL_DisplayFormat(loadedImage);
                SDL_FreeSurface(loadedImage);
            }
     
        return optimizedImage;
    }
     
    void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination)
    {
        SDL_Rect position;
        position.x = x;
        position.y = y;
     
        SDL_BlitSurface(source, NULL, destination, &position);
    }
    Et finalement le fonctions.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include "fonctions.cpp"
     
    SDL_Surface *load_image(std::string filename);
     
    void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination);
    Rien de bien compliqué, c'est juste un essais. Par contre selon mon compilateur j'ai une "multiple definition of 'load_image(std::string)' " ainsi qu'une: "multiple definition of 'apply_surface(...)' "

    Quand je met mes fonctions et mes headers dans le même fichier que mon main, aucun problème. Par contre si ils sont dans des fichiers séparés, mon compilateur ne veut rien savoir.

    J'aimerais donc savoir si je n'ai pas eu un mauvais réflexe hérité du C ou si j'ai tout simplement fait une grosse erreur, merci d'avance

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "fonctions.cpp"


    Le fichier fonctions.cpp devrait inclure fonctions.h mais pas l'inverse.

    Une grade serait aussi souhaitable :

    Code fonctions.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef H_FONCTIONS
    #define H_FONCTIONS
    SDL_Surface *load_image(std::string filename);
     
    void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination);
    #endif

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Par défaut
    A l'origine c'est le fonctions.cpp qui inclue le .h. J'avais changé pour voir si le problème viens de là.

    J'ai ajouté le #ifndef mais le problème persiste. Étrange ...

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Peut on ravoir le code, une fois modifié, car le problème est assez étrange si vous avez bien suivi ce que l'ont vous a dit
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Par défaut
    Voici le code une fois modifié:

    Le main:
    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
    #include <cstdlib>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <string>
    #include "fonctions.cpp"
     
    int main ( int argc, char** argv )
    {
        SDL_Surface* ecran = NULL;
        SDL_Surface* message = NULL;
     
        SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER);
     
        ecran = SDL_SetVideoMode(640,480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
     
        message = load_image("cb.bmp");
        apply_surface(0,0,message,ecran);
     
        SDL_Delay(1000);
        SDL_FreeSurface(message);
        SDL_Quit();
        return 0;
    }
    Le fonctions.cpp
    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
    #include <cstdlib>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <string>
    #include "fonctions.h"
     
     
    SDL_Surface *load_image(std::string filename)
    {
        SDL_Surface* loadedImage = NULL;
        SDL_Surface* optimizedImage = NULL;
     
        loadedImage = SDL_LoadBMP(filename.c_str());
     
        if (loadedImage != NULL)
            {
                optimizedImage = SDL_DisplayFormat(loadedImage);
                SDL_FreeSurface(loadedImage);
            }
     
        return optimizedImage;
    }
     
    void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination)
    {
        SDL_Rect position;
        position.x = x;
        position.y = y;
     
        SDL_BlitSurface(source, NULL, destination, &position);
    }
    Le fonctions.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef H_FONCTIONS
    #define H_FONCTIONS
    SDL_Surface *load_image(std::string filename);
     
    void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination);
    #endif

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Tu inclus encore le fonctions.cpp dans un autre fichier.

    un fichier c ou cpp ne devrait jamais être inclus dans un autre.

    Dans le main, remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "fonctions.cpp"
    par

Discussions similaires

  1. "multiple definition of" pour une fonction.
    Par ikoria dans le forum Débuter
    Réponses: 3
    Dernier message: 20/01/2009, 10h47
  2. Definition d'une fonction locale
    Par franc82 dans le forum C++
    Réponses: 1
    Dernier message: 09/11/2006, 22h07
  3. Definition d'une fonction
    Par philippe du web dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/08/2006, 13h16
  4. Réponses: 6
    Dernier message: 12/07/2006, 19h29
  5. Déclaration multiple d'une fonction
    Par Julien C. dans le forum Langage
    Réponses: 2
    Dernier message: 17/06/2003, 16h38

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