2012-02-13 15 views
30

Soy un poco nuevo en C++. Tengo problemas para configurar mis encabezados. Esta es de functions.hFunción de argumentos y encabezados predeterminados

extern void apply_surface(int, int, SDL_Surface *, SDL_Surface *,SDL_Rect *); 

Y esta es la definición de la función de functions.cpp

void 
apply_surface(int x, int y, SDL_Surface * source, SDL_Surface * 
destination,SDL_Rect *clip = NULL) 
{ 
    ... 
} 

Y así es como yo lo uso en main.cpp

#include "functions.h" 
int 
main (int argc, char * argv[]) 
{ 
    apply_surface(bla,bla,bla,bla); // 4 arguments, since last one is optional. 
} 

Pero , esto no se compila, porque main.cpp no ​​sabe que el último parámetro es opcional. ¿Cómo puedo hacer que esto funcione?

+0

¿Ha intentado agregar al encabezado? – PlasmaHH

Respuesta

57

La declaración (es decir, en el archivo de encabezado - functions.h) contiene el parámetro opcional, no la definición (functions.cpp). valor del parámetro

//functions.h 
extern void apply_surface(int, int, SDL_Surface *, SDL_Surface *,SDL_Rect * clip = NULL); 

//functions.cpp 
void apply_surface(int x, int y, SDL_Surface * source, SDL_Surface * 
destination,SDL_Rect *clip /*= NULL*/) 
{ 
    ... 
} 
+5

Para aclarar, la declaración es la parte en el encabezado. –

8

El valor por defecto debería estar en la declaración de la función (functions.h), en lugar de en la definición de función (function.cpp).

1

Uso:

extern void apply_surface(int, int, SDL_Surface *, SDL_Surface *,SDL_Rect * = NULL); 

(tenga en cuenta que no puedo comprobar aquí, no tienen un compilador cercano).

Cuestiones relacionadas