未初始化的变量麻烦C++

Uninitialized variable trouble C++

我不断收到“'rate' 未在此函数中初始化”的错误消息。

任何人都可以直接看出原因吗?我查看了我的代码,并在我的其他函数上正确地传递了它,错误源于这个函数。有什么想法吗?

double compute_rate(int userAge_array[], char sportType_array[], int index)
{
  double rate;
  if (sportType_array[index] == 'f') {
    if (userAge_array[index] < 25) {
      rate = 68.95;
    }
    else if (userAge_array[index] > 25) {
      rate = 55.95;
    }
  }
  if (sportType_array[index] == 'g') {
    if (userAge_array[index] < 25) {
      rate = 73.95;
    }
    else if (userAge_array[index] > 25) {
      rate = 65.95;
    }
  }
  if (sportType_array[index] == 'h') {
    if (userAge_array[index] < 25) {
      rate = 99.95;
    }
    else if (userAge_array[index] > 25) {
      rate = 92.95;
    }
  }

  return rate;
}

您将在函数末尾返回 rate,但它可能永远不会初始化,因为所有赋值都在 ifs 语句中,可能根本不会被处理。

解法:

首先使用一些您将接受的默认值分配给它,以防没有一个 ifs 起作用:

double rate=0.0;

如果 sportType_array[index] 不是 'f'、'g' 或 'h',函数直接跳转到 return,它 returns rate,未初始化。

如果这些数组中的值不正确,您希望 return 得到什么值?最好将 rate 设置为该值,即使 不应该 发生。

如果 sportType_array[index] 不是 'f''g''h'if 块中的 none 将执行。您应该将它们更改为 if/else if,然后在没有匹配项时添加最后的 else 子句。

但更有可能的是,问题是 userAge_array[index] == 25。当 rate 小于 25 或大于 25 时设置 rate,但永远不要设置 rate 当它正好等于 25 时。尝试使用 else 而不是 else if,这样你就涵盖了所有情况。

double compute_rate(int userAge_array[], char sportType_array[], int index)
{
  double rate;
  if (sportType_array[index] == 'f') {
    if (userAge_array[index] < 25) {
      rate = 68.95;
    }
    else {
      rate = 55.95;
    }
  }
  else if (sportType_array[index] == 'g') {
    if (userAge_array[index] < 25) {
      rate = 73.95;
    }
    else {
      rate = 65.95;
    }
  }
  else if (sportType_array[index] == 'h') {
    if (userAge_array[index] < 25) {
      rate = 99.95;
    }
    else {
      rate = 92.95;
    }
  }
  else {
      rate = 0.0;
  }

  return rate;
}