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.