web-dev-qa-db-fra.com

Arguments et en-têtes par défaut de la fonction

Je suis un peu nouveau pour C++. J'ai du mal à configurer mes en-têtes. Cela vient de functions.h

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

Et ceci est la définition de fonction de functions.cpp

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

Et voici comment je l'utilise dans main.cpp

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

Mais cela ne se compile pas, car main.cpp ne sait pas que le dernier paramètre est facultatif. Comment puis-je faire fonctionner cela?

44
yasar

Vous faites la déclaration (c'est-à-dire dans le fichier d'en-tête - functions.h) contiennent le paramètre facultatif, pas la définition (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*/)
{
    ...
}
80
Luchian Grigore

La valeur de paramètre par défaut doit être dans la déclaration de fonction (functions.h), plutôt que dans la définition de fonction (function.cpp).

10
Didier Trosset

Utilisation:

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

(notez que je ne peux pas le vérifier ici; ne pas avoir de compilateur à proximité).

2
Michel Keijzers