在解除声明中定义默认参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在解除声明中定义默认参数相关的知识,希望对你有一定的参考价值。

我有一个函数,类型是 void send(int option, int key = 0) 哪儿 key 的默认参数为 1. 由于链接器的引用问题,我必须声明类型的 send 在文件的顶部。

void send(int option, int key);

...

void send(int option, int key = 0) 
    // Actual implementation here

我有一堆调用 send 的函数,有的有,有的没有 key 例如 send(4)send(2, 6)

问题在于编译顶行初始函数声明。

尝试1:

void send(int option, int key);

抛出错误的功能 send(4) 因为它认为自己需要一个键值。

尝试2:

void send(int option, int key = 0);

抛出这个 error: default argument given for parameter 2 of 'void send(int, int)' [-fpermissive] void send(int option, int key = 0)

企图3:

void send(int option);
void send(int option, int key);

投掷 undefined reference to 'send(int)' 中的一个函数体。

我使用的是 gcc版本7.2.0. 如何定义一个带有默认可选参数的函数的类型(最好不要用头文件).我有一个类型为void send(int option, int key = 0)的函数,其中key的默认参数为1.由于链接器的引用问题,我必须声明类型。

答案

如果你在声明中指定了默认参数(你应该这样做),你一定不要在定义中指定它。

void send(int option, int key = 0);

// ...

void send(int option, int key) 
    // Actual implementation here

以上是关于在解除声明中定义默认参数的主要内容,如果未能解决你的问题,请参考以下文章

函数声明和函数定义中的默认参数浅析

指定默认参数的朋友声明必须是定义

函数参数的扩展

如何为as2中的方法定义默认参数值?

golang函数中的参数为啥不支持默认值

ES6--函数的扩展