如何在 C++ 中声明带有默认参数值的函数声明?

问题描述 投票:0回答:1

比如说,我有以下使用

sum
函数的代码,该函数具有
skip_value
参数的默认值。
sum
函数使用默认值:

import <print>;
import <vector>;
import <optional>;

std::optional<int> sum(std::vector<int> nums, int skip_value = 100);

int main()
{
  std::vector<int> nums { 10, 20, 30, 100 };
  std::optional<int> result = sum(nums);
  if (result.has_value()) {
    std::println("sum = {}", result.value());
  }
  else {
    std::println("no results were found");
  }
}
std::optional<int> sum(std::vector<int> nums, int skip_value = 100) {
  int result { 0 };
  for (const auto& num : nums) {
    if (num != skip_value)
      result += num;
  }
  if (result == 0) {
    return { };
  } else {
    return result;
  }
}

如您所见,函数实现对于

100
参数具有默认值
skip_value
。我在函数声明中写了同样的内容。但是,我收到错误:

错误 C2572“sum”:重新定义默认参数:参数 1

好的。我将函数声明更改为以下内容:

std::optional<int> sum(std::vector<int> nums, int skip_value);

现在我得到不同的错误:

错误 C2660“sum”:函数不接受 1 个参数

我该如何做才是正确的?

visual-c++
1个回答
0
投票

在声明中使用

std::optional<int> sum(std::vector<int> nums, int skip_value);
,默认参数在定义中。

std::optional<int> sum(std::vector<int> nums, int skip_value);

std::optional<int> sum(std::vector<int> nums, int skip_value = 100) {
  int result { 0 };
  for (const auto& num : nums) {
    if (num != skip_value)
      result += num;
  }
  if (result == 0) {
    return { };
  } else {
    return result;
  }
}

这应该可以编译。

© www.soinside.com 2019 - 2024. All rights reserved.