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