2012-02-13 65 views
30

我對C++很陌生。我無法設置我的標題。這是functions.h函數默認參數和標題

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

這是從functions.cpp函數定義

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

這是我如何使用它在main.cpp中

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

但,這不會編譯,因爲main.cpp不知道最後一個參數是可選的。我該如何做這項工作?

+0

你有沒有嘗試添加到標題? – PlasmaHH 2012-02-13 12:08:54

回答

57

您使聲明(即在頭文件中 - functions.h)包含可選參數,而不是定義(functions.cpp)。

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

爲了澄清,聲明是標題中的部分。 – 2012-02-13 12:10:08

8

默認參數值應該在函數聲明(functions.h)中,而不是在函數定義(function.cpp)中。

1

用途:

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

(注意我不能在這裏檢查;附近沒有一個編譯器)。