是否应在标头或.cpp源文件中指定C ++函数的默认参数值?


78

我是C ++的新手。我在设置标题时遇到了麻烦。这是来自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不知道最后一个参数是可选的。我该如何工作?


您是否尝试过添加标题?
PlasmaHH 2012年

Answers:


119

您使声明(即在头文件-中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*/)
{
    ...
}

7
为了澄清,声明是标题中的部分。
比约恩·波莱克斯(BjörnPollex)2012年

谢谢你,也谢谢@BjörnPollex!这对我有帮助。
M.Ionut

这是我在设置一个空的C ++应用程序时总是会感到困惑的地方,我真的需要开始使用默认应用程序设置
clockw0rk


2

采用:

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

(请注意,我在这里无法检查;附近没有编译器)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.