Sollten Standard-Argumentwerte für C ++ - Funktionen in Headern oder CPP-Quelldateien angegeben werden?

75

Ich bin ein bisschen neu in C ++. Ich habe Probleme beim Einrichten meiner Header. Dies ist von functions.h

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

Und das ist die Funktionsdefinition aus functions.cpp

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

Und so benutze ich es 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.
}

Dies wird jedoch nicht kompiliert, da main.cpp nicht weiß, dass der letzte Parameter optional ist. Wie kann ich das zum Laufen bringen?

Yasar
quelle
Haben Sie versucht, dem Header etwas hinzuzufügen?
PlasmaHH

Antworten:

111

Sie machen, dass die Deklaration (dh in der Header-Datei - functions.h) den optionalen Parameter enthält, nicht die Definition ( 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*/)
{
    ...
}
Luchian Grigore
quelle
7
Zur Verdeutlichung ist die Deklaration der Teil in der Kopfzeile.
Björn Pollex
Danke und auch @ BjörnPollex! Das hat mir geholfen.
M.Ionut
13

Der Standardparameterwert sollte in der Funktionsdeklaration (functions.h) und nicht in der Funktionsdefinition (function.cpp) enthalten sein.

Didier Trosset
quelle
2

Verwenden:

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

(Hinweis: Ich kann es hier nicht überprüfen. Ich habe keinen Compiler in der Nähe.)

Michel Keijzers
quelle