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?


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*/)
{
    ...
}

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.


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.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.