2012-02-13 21 views
30

Sono una specie di novità in C++. Sto riscontrando problemi nell'impostare le mie intestazioni. Questo è da functions.hArgomenti e intestazioni predefinite delle funzioni

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

E questa è la definizione di funzione da functions.cpp

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

E questo è come lo uso in main.cpp

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

Ma , questo non viene compilato, perché main.cpp non sa che l'ultimo parametro è facoltativo. Come posso fare questo lavoro?

+0

hai provato ad aggiungere all'intestazione? – PlasmaHH

risposta

57

La dichiarazione (ad esempio nel file di intestazione - functions.h) contiene il parametro facoltativo, non la definizione (functions.cpp). valore del parametro

//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

Per chiarire, la dichiarazione è la parte nell'intestazione. –

8

Il default dovrebbe essere nella dichiarazione di funzione (functions.h), piuttosto che nella definizione della funzione (function.cpp).

1

Usa:

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

(notare che non posso controllare qui; non hanno un compilatore nelle vicinanze).

Problemi correlati