Esto pasa porque al definir las funciones en el .h estas se generan en los archivos .o entonces obtienes nivel.o con las funciones del .h y jose.o también con las mismas funciones del .h
Crea un displayer.cpp donde defines las funciones de displayer.h
displayer.h vedría a quedar así:
Código:
#ifndef _displayer_h_
#define _displayer_h_
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include string //el foro no toma los <>
#include "defines.h"
SDL_Surface *load_imagen( std::string filename );
void apply_surface( int x, int y, SDL_Surface* origen, SDL_Surface* destino );
#endif
y displayer.cpp
Código:
#include "displayer.h"
SDL_Surface *load_imagen( std::string filename )
{
/*blablabalblaba*/
}
void apply_surface( int x, int y, SDL_Surface* origen, SDL_Surface* destino )
{
/*blablabalblaba*/
}
luego compilas displayer.cpp, nivel.cpp y jose.cpp
y entonces el programa:
g++ joseT.cpp -o josef nivel.o jose.o displayer.o -lSDL -lSDL_image