簡體   English   中英

為什么我已經定義了一個未初始化的局部變量錯誤?

[英]Why am I getting an uninitialized local variable error when I have already defined it?

我是 c++ 的初學者,我遇到了這個錯誤的問題,我知道這個錯誤意味着我正在嘗試使用一個尚未被賦予值的變量。

程序的上下文是一個變量叫做option,option的值是用戶在后面的function中輸入的。 當我開始收到此錯誤時,我唯一的想法是給變量一個在 function 中確定的值,因此寫為“option = enteroption(option);” 但是它仍然說該變量未初始化。 任何人都可以幫助解釋我可能做錯了什么嗎? 謝謝。

#include "pch.h"
#include <iostream>
#include "Arcade game menu.h"
using namespace std;


int main()
{

    char option; //declare variable 
    float balance; //declare variable

    const unsigned char pounds(156); //signatures for functions
    void processoption(char, float&, char);
    void payinitialfee(float&);
    char enteroption(char);


    payinitialfee(balance); //call functions
    enteroption(option); 



    while ((option != 'Q') && (balance > 0)); //while option is not Q and balance is greater than 0 call functions
    {
        processoption(option, balance, pounds);
        option = enteroption(option);
    }

    cout << "Thanks for playing." << endl;

    system("pause");
}

void payinitialfee(float& balance)
{
    balance = 100;
}

char enteroption(char option)
{
    cout << "Enter option..." << endl << "P:Play or B:Balance or Q:Quit" << endl;
    cin >> option;
    void putinUpperCase(char);
    putinUpperCase(option);

    return option;
}

void putinUpperCase(char option)
{
    option = toupper(option);
}

void processoption(char option, float&balance, char pounds)
{

    void playGame(float&); //signatures
    void showbalance(float&, char);

    switch (option)
    {
    case 'P': playGame(balance);
        break;
    case 'B': showbalance(balance, pounds);
        break;
    default: cout << "ERROR: INVALID COMMAND." << endl;
        break;
    }

}

void playGame(float& balance)
{
    cout << "Playing..." << endl;
    balance = balance - 20;
}

void showbalance(float&balance, char pounds)
{
    cout << "The current balance is... " << pounds << balance << endl;
}

您將未初始化的變量option作為參數傳遞給 function enteroption

option = enteroption(option);

這沒有任何意義,編譯器會將其指向您的。

function 可以這樣聲明

char enteroption();

在 function 中,您可以聲明一個將獲取值的局部變量option 然后這個變量可以從 function 中返回,並賦值給 main 中聲明的變量option

似乎 function 的調用

putinUpperCase(option);

沒有效果,因為變量option未通過引用。 參見 function 聲明

void putinUpperCase(char);

似乎 function 應該聲明為

void putinUpperCase( char & );

編譯器對此是正確的。

在您當前的代碼中,您調用option = enteroption(option) 此時option未定義,編譯器會告訴您。 您要么想通過引用傳遞option

void enteroption(char &option)
{
    // ...
    cin >> option;
    // ...
}

或者不要在這里使用參數:

char enteroption()
{
    char option;
    // ...
    cin >> option;
    // ...
    return option;
}

您可以通過調用 function 而不是返回字符來傳遞本地成員option的引用。 相同的方法可以用於制作最終稱為 function 的大寫字母,可以使用傳入的引用來修改參數的值。

enteroption(option);

void enteroption(char& option)
{
  cout << "Enter option..." << endl << "P:Play or B:Balance or Q:Quit" << endl;
  cin >> option;
  void putinUpperCase(char&);
  putinUpperCase(option);
  return;
}

void putinUpperCase(char& option)
{
  option = toupper(option);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM