Подтвердить что ты не робот

Следует ли указывать значения аргументов по умолчанию для функции C++ в заголовочных файлах или исходных файлах .cpp?

Я как бы новичок в С++. У меня возникают проблемы с настройкой заголовков. Это from 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 не знает, что последний параметр является необязательным. Как я могу сделать эту работу?

4b9b3361

Ответ 1

В объявлении (т.е. в файле заголовка - 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*/)
{
    ...
}

Ответ 2

Значение параметра по умолчанию должно быть в объявлении функции (functions.h), а не в определении функции (function.cpp).

Ответ 3

Использование:

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

(обратите внимание, что я не могу проверить его здесь, у вас нет компилятора).