2016-04-01 9 views
0

Dies ist mein Code:C++ Einige Variablen "verwendet in dieser Funktion nicht initialisiert". Warum?

#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 <<"Goodbye\n"; 

    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.M\n"; 
} 

Der Compiler gibt mir die folgenden Fehler:

Problem2.cpp: In der Funktion 'int main()':

Problem2.cpp: 15: 36: Warnung: "Stunde" wird in dieser Funktion nicht initialisiert verwendet [-Wuninitialized] input_function (Stunde, Minuten);

Problem2.cpp: 15: 36: Warnung: 'Minuten' in dieser Funktion nicht initialisierten verwendet wird [-Wuninitialized]

Problem2.cpp: 16: 41: Warnung: 'meridien' kann in diesem verwendet wird, nicht initialisierten Funktion [-Waybe-uninitialized] Berechnung (Stunde, Minuten, Meridien);

Was habe ich falsch gemacht?

+4

Ich würde vorschlagen, zu lesen, wie Parameter nach Wert vs durch Referenz übergeben werden. –

Antwort

2

Ihre Eingabefunktion sollte als Referenz übergeben werden.
Wenn Sie nur nach Wert übergeben, hat dies keine Auswirkungen.

#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 <<"Goodbye\n"; 

     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.M\n"; 
    } 
0

Der Fehler, den Sie über nicht initialisierte Variablen bekommen, bedeutet, dass das Programm versucht, die Variablen zu verwenden, ohne dass ihnen ein Wert zugewiesen wird. Wikipedia definiert sie wie folgt:

In computing, eine nicht initialisierte Variable ist eine Variable, die deklariert wird, ist jedoch nicht auf einen bestimmten bekannten Wert eingestellt, bevor sie verwendet wird. Es wird einen Wert haben, aber keinen vorhersehbaren. Als solches ist es ein Programmierfehler und eine häufige Quelle von Fehlern in der Software.

diese Fehler beheben Sie könnten versuchen, Ihre Variablen Anfangswerte zu geben. Die tatsächliche Nummer sollte nicht wichtig sein, es sei denn, sie ist zu groß für die Ganzzahl.

Es ist auch sehr wahrscheinlich, dass, wenn Sie das beheben, dass Ihr Programm nicht tun wird, was Sie erwarten. Das liegt daran, dass Ihre Funktionen momentan Parameter akzeptieren, aber nicht die Variablen in Ihrer int main() Funktion ändern.

Es gibt mehrere Möglichkeiten, dies zu beheben. Sie könnten durch einen Verweis:

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

Auf diese Weise würde lassen Sie die Funktion mit den Variablen interagieren, die Sie tatsächlich verwenden möchten, und ist wahrscheinlich der beste Weg, dies zu bewältigen.

Oder wenn das verwirrend ist, versuchen Sie vielleicht auch, sie als global variables zu deklarieren oder Ihre Funktionen ganzzahlige Werte zurückgeben.

Viel Glück!

Verwandte Themen