2012-02-13 15 views
30

मैं सी ++ के लिए नया हूं। मुझे अपने हेडर स्थापित करने में परेशानी हो रही है। यह 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

उत्तर

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

स्पष्टीकरण के लिए, घोषणा हेडर में हिस्सा है। –

8

डिफ़ॉल्ट पैरामीटर मान फ़ंक्शन परिभाषा (function.cpp) की बजाय फ़ंक्शन घोषणा (functions.h) में होना चाहिए।

1

उपयोग:

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

(ध्यान दें मैं इसे यहाँ की जाँच नहीं कर सकते हैं; आस-पास एक संकलक नहीं है)।

संबंधित मुद्दे