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:
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:
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:
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 ;)