是否应在头文件或.cpp源文件中指定C++函数的默认参数值
Should C++ function default argument values be specified in headers or .cpp source files?
我对C++有点陌生。我在设置标题时遇到问题。这是来自函数.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不知道最后一个参数是可选的。我怎样才能做到这一点?
您使声明(即在头文件-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*/)
{
...
}
默认参数值应在函数声明(functions.h)中,而不是在函数定义(function.cpp)中。
使用:
extern void apply_surface(int, int, SDL_Surface *, SDL_Surface *,SDL_Rect * = NULL);
(注意,我不能在这里检查;附近没有编译器)。
奇怪的是,如果我有一个没有默认参数的虚拟函数,然后继承者在.h文件中没有默认参数,然后在他们的.cpp文件中有默认参数,这对我来说很好。像这样:
// in .h
class Base {virtual void func(int param){}};
class Inheritor : public Base {void func(int param);};
// in .cpp
void Inheritor::func(int param = 0){}
原谅粗制滥造的格式
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗