Undefined référence to "fonction" [Résolu]

Signaler
Messages postés
3
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
17 août 2012
-
Messages postés
3
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
17 août 2012
-
Help me !!!
ça fais maintenant plusieurs jours que je bloque sur cette erreur.
je suis débutant en C/SDL et je ne trouve pas mon erreur

voici mon main où j'appelle ma fonction jouer :
#include <stdlib.h>
#include <stdio.h>
#include <SDL.h>
#include <SDL_image.h>

#include "constante.h"
#include "jeu.h"


void pause();

int main(int argc, char *argv[])
{
    SDL_Surface *ecran NULL, *menu NULL;
    SDL_Rect positionMenu;
    SDL_Event event;

    int continuer = 1;

    SDL_Init(SDL_INIT_VIDEO);

    SDL_WM_SetIcon(SDL_LoadBMP("avant1.bmp"), NULL); // L'icône doit être chargée avant SDL_SetVideoMode
    ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    SDL_WM_SetCaption("The Adventure of ceanoth", NULL);

    menu = SDL_LoadBMP("menu.bmp");
    positionMenu.x = 0;
    positionMenu.y = 0;

    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {
                    case SDLK_ESCAPE: // Veut arrêter le jeu
                        continuer = 0;
                        break;
                    case SDLK_KP1: // Demande à jouer
                        jouer(ecran);
                        break;
                }
                break;
        }

        // Effacement de l'écran
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
        SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
        SDL_Flip(ecran);
    }

    SDL_FreeSurface(menu);
    SDL_Quit();

    return EXIT_SUCCESS;
}



void pause()
{
    int continuer = 1;
    SDL_Event event;

    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
        }
    }
}




Ma fonction jouer :
#include <stdlib.h>
#include <stdio.h>
#include <SDL.h>
#include <SDL_image.h>

#include "constante.h"
#include "jeu.h"


void jouer(SDL_Surface *ecran)
{
    SDL_Surface *ceanoth[16] = {NULL}; // 4 surface pour 4 directions
    SDL_Surface *ceanothactuel = NULL;
    SDL_Rect positionceanoth;
    SDL_Event event;

    int continuer 1, i 0, j = 0;
    int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};

    // Chargement des sprites (personnage)
    ceanoth[avant1] = SDL_LoadBMP("avant1.bmp");
//    ceanoth[avant2] = SDL_LoadBMP("avant2.bmp");
//    ceanoth[avant3] = SDL_LoadBMP("avant3.bmp");
//    ceanoth[avant4] = SDL_LoadBMP("avant4.bmp");
    ceanoth[arriere1] = SDL_LoadBMP("arriere1.bmp");
//    ceanoth[arriere2] = SDL_LoadBMP("arriere2.bmp");
//    ceanoth[arriere3] = SDL_LoadBMP("arriere3.bmp");
//    ceanoth[arriere4] = SDL_LoadBMP("arriere4.bmp");
    ceanoth[gauche1] = SDL_LoadBMP("gauche1.bmp");
//    ceanoth[gauche2] = SDL_LoadBMP("gauche2.bmp");
//    ceanoth[gauche3] = SDL_LoadBMP("gauche3.bmp");
//    ceanoth[gauche4] = SDL_LoadBMP("gauche4.bmp");
    ceanoth[droite1] = SDL_LoadBMP("droite1.bmp");
//    ceanoth[droite2] = SDL_LoadBMP("droite2.bmp");
//    ceanoth[droite3] = SDL_LoadBMP("droite3.bmp");
//    ceanoth[droite4] = SDL_LoadBMP("droite4.bmp");

    ceanothactuel = ceanoth[arriere1]; // ceanoth sera dirigé vers le bas au départ

     // Recherche de la position de Mario au départ
    for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
    {
        for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
        {
            if (carte[i][j] == ceanoth) // Si Mario se trouve à cette position sur la carte
            {
                positionceanoth.x = i;
                positionceanoth.y = j;
                carte[i][j] = VIDE;
            }
        }
    }

    // Activation de la répétition des touches
    SDL_EnableKeyRepeat(100, 100);

     while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {
                    case SDLK_ESCAPE:
                        continuer = 0;
                        break;
                    case SDLK_UP:
                        ceanothactuel = ceanoth[avant1];
                        positionceanoth.y--;
                        break;
                    case SDLK_DOWN:
                        ceanothactuel = ceanoth[arriere1];
                        positionceanoth.y++;
                        break;
                    case SDLK_RIGHT:
                        ceanothactuel = ceanoth[droite1];
                        positionceanoth.x++;
                        break;
                    case SDLK_LEFT:
                        ceanothactuel = ceanoth[gauche1];
                        positionceanoth.x--;
                        break;
                }
                break;
        }

    // Désactivation de la répétition des touches (remise à 0)
    SDL_EnableKeyRepeat(0, 0);

    // Libération des surfaces chargées
    for (i = 0 ; i < 16 ; i++)
        SDL_FreeSurface(ceanoth[i]);
    }
}



Et lorsque je compile code:block me met un undefined refence to 'jouer(SDL_surface *)'

Je précise, je suis débutant et mon code n'est pas fini des aides, conseilles et autres sont les bienvenus

2 réponses

Messages postés
3
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
17 août 2012

j'ai fais voir mon code à un ami et on à pu constater que mon 'main' n'étais pas "main.c" mais "main.cpp" donc en recréant correctement le 'main' tout va bien. Par contre aucune idée de pourquoi l'extension n'étais pas bonne.
Merci beaucoup e"n tout cas, j'aurais peut être encore besoin de vous d'ici la fin de mon projet =P
A plus
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
109
Bonjour.

C'est une erreur de compilation ou de link ?

Si c'est une erreur de compilation, vérifie que la fonction "jouer" ait bien la même signature dans le header et le fichier de code (et qu'il soit bien présent dans
le header). Tu peux aussi vérifier que la garde de ton header ne soit pas mal conçue (ça arrive sur une faute de frappe).
Enfin, vérifie que le fichier "jeu.h" soit bien trouvé par ton fichier "main.c".

Si c'est une erreur de link, vérifie que le fichier "jeu.c" soit bien dans la ligne de compilation (si tu ne compiles que le "main.c", c'est sur que ça fonctionnera tout de suite moins bien :p)

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question