C++ 某些变量"used uninitialized in this function"。为什么?

C++ Some variables "used uninitialized in this function". Why?

本文关键字:function this 为什么 in uninitialized 变量 used C++      更新时间:2023-10-16

这是我的代码:

#include <iostream>
using namespace std;
void input_function(int hour, int minutes);
void calcuation(int hour, int minutes, char meridien);
void output_function(int hour, int minutes, char meridien);
int main ()
{
  int hour, minutes;
  char answer, meridien;
  do
    {
      input_function(hour, minutes);
      calcuation(hour, minutes, meridien);
      output_function(hour, minutes, meridien);

      cout << "Would you like to try again? (Y/N)n";
      cin >> answer;
    } while(answer == 'Y' || answer == 'y');
  cout <<"Goodbyen";
  return 0;
}
void input_function(int hour, int minutes)
{
  cout << "Enter the hour in 24 hour notation: (Ex. 23)n";
  cin >> hour;
  cout << "Enter the minutes:n";
  cin >> minutes;
}
void calcuation(int hour, int minutes, char meridien)
{
  if (hour > 12)
    {
      hour = hour - 12;
      meridien = 'P';
    }
  else 
    {
      meridien = 'A';
    }
}
void output_function(int hour, int minutes, char meridien)
{
  cout << "Your time in 12 hour notation is:n";
  cout << hour << ":" << minutes << endl;
  if (meridien == 'P')
    cout << "P.M.n";
  else 
    cout << "A.Mn";
}

编译器给了我以下错误:

Problem2.cpp:在函数"int main()"中:

问题2.cpp:15:36:警告:"hour"在此函数中未初始化就使用了[-Wuninitialized]input_function(小时、分钟);

问题2.cpp:15:36:警告:"minutes"在此函数中未初始化使用[-Wuninitialized]

问题2.cpp:16:41:警告:"meridien"可能在未初始化的情况下在此函数中使用[-Wmaybe uninitialized]计算(小时、分钟、子午线);

我做错了什么?

您的input_function应该通过引用传递。
如果只传递值,则不会影响任何内容。

  #include <iostream>
    using namespace std;
    void input_function(int& hour, int& minutes);
    void calcuation(int hour, int minutes, char meridien);
    void output_function(int hour, int minutes, char meridien);
    int main ()
    {
      int hour, minutes;
      char answer, meridien;
      do
        {
          input_function(hour, minutes);
          calcuation(hour, minutes, meridien);
          output_function(hour, minutes, meridien);

          cout << "Would you like to try again? (Y/N)n";
          cin >> answer;
        } while(answer == 'Y' || answer == 'y');
      cout <<"Goodbyen";
      return 0;
    }
    void input_function(int& hour, int& minutes)
    {
      cout << "Enter the hour in 24 hour notation: (Ex. 23)n";
      cin >> hour;
      cout << "Enter the minutes:n";
      cin >> minutes;
    }
    void calcuation(int hour, int minutes, char meridien)
    {
      if (hour > 12)
        {
          hour = hour - 12;
          meridien = 'P';
        }
      else 
        {
          meridien = 'A';
        }
    }
    void output_function(int hour, int minutes, char meridien)
    {
      cout << "Your time in 12 hour notation is:n";
      cout << hour << ":" << minutes << endl;
      if (meridien == 'P')
        cout << "P.M.n";
      else 
        cout << "A.Mn";
    }

您收到的关于未初始化变量的错误意味着程序试图在没有为变量赋值的情况下使用这些变量。维基百科对它们的定义如下:

在计算中,未初始化变量是指在使用前已声明但未设置为明确已知值的变量。它会有一些价值,但不是可预测的。因此,这是一个编程错误,也是软件中常见的错误来源。

若要修复这些错误,您可以尝试为变量提供初始值。实际使用的数字应该无关紧要,除非它对整数来说太大。

当你修复这个问题时,你的程序也很可能不会达到你的预期。这是因为目前您的函数正在接受参数,但实际上并没有更改int main()函数中的变量。

有几种方法可以解决这个问题。你可以通过参考:

void input_function(int& hour, int& minutes)
{
  //things happen, the & sign before the variables is the important part
}

这样做可以让函数与您实际想要使用的变量进行交互,这可能是解决此问题的最佳方法。

或者,如果这令人困惑,也可以尝试将它们声明为全局变量或使函数返回整数值。

祝你好运!