未初始化的局部变量使用错误

Uninitialized local variable used error

本文关键字:错误 局部变量 初始化      更新时间:2023-10-16

所以这是我的代码,应该运行,但它没有,因为我得到错误"未初始化的局部变量' rnumeric '使用"在我的代码在这里,我认为是源于主要。不知道为什么,我错过了什么?谢谢你

#include <iostream>
#include <string>

using namespace std;
class romanType
{
public:
    int convertNum(char rNum);
    void decimalPrint();
    void romanPrint();
    romanType(int store);
    //Constructor with parameter
    romanType();
    char roman[7];
    string num;
    int length = 0;
    string dNum;
    int equals;
};

void romanType::romanPrint()
{
    cout << "The Roman numeral is: " << roman << endl;
}

void romanType::decimalPrint()
{
    cout << "The Decimal number is: " << equals << endl;
}

int romanType::convertNum(char rNum)
{
    int subtractSum = 0;
    int totalNum = 0;

    for (int i = 0; i< dNum.length(); i++)
    {
        switch (roman[i])
        {
        case 'M':
            totalNum += 1000;
            if (subtractSum < 1000)
                totalNum -= subtractSum * 2;

        case 'm':
            totalNum += 1000;
            if (subtractSum < 1000)
                totalNum -= subtractSum * 2;
            break;
        case 'D':
            totalNum += 500;
            if (subtractSum < 500)
                totalNum -= subtractSum * 2;
            break;
        case 'd':
            totalNum += 500;
            if (subtractSum < 500)
                totalNum -= subtractSum * 2;
            break;
        case 'C':
            totalNum += 100;
            if (subtractSum < 100)
                totalNum -= subtractSum * 2;
            break;
        case 'c':
            totalNum += 100;
            if (subtractSum < 100)
                totalNum -= subtractSum * 2;
            break;
        case 'L':
            totalNum += 50;
            if (subtractSum < 50)
                totalNum -= subtractSum * 2;
            break;
        case 'l':
            totalNum += 50;
            if (subtractSum < 50)
                totalNum -= subtractSum * 2;
            break;
        case 'X':
            totalNum += 10;
            if (subtractSum < 10)
                totalNum -= subtractSum * 2;
            break;
        case 'x':
            totalNum += 10;
            if (subtractSum < 10)
                totalNum -= subtractSum * 2;
            break;
        case 'V':
            totalNum += 5;
            if (subtractSum < 5)
                totalNum -= subtractSum * 2;
            break;
        case 'v':
            totalNum += 5;
            if (subtractSum < 5)
                totalNum -= subtractSum * 2;
            break;
        case 'I':
            totalNum += 1;
            if (subtractSum < 1)
                totalNum -= subtractSum * 2;
            break;
        case 'i':
            totalNum += 1;
            if (subtractSum < 1)
                totalNum -= subtractSum * 2;
            break;
        default: 
            cout << "not valid!" << endl;
        }
        totalNum = totalNum + subtractSum;
        equals = totalNum;
        return equals;
    }
};

int main()
{
    romanType output;

    int rNumeral;
    char entry;
    romanType roman = romanType(rNumeral);
    // input for entry
    cout << "Please enter a Roman numeral (Capitalized only): " << endl;
    cin >> rNumeral;
    // print options
    cout << "Print Decimal or Roman Numeral? Type 1 for Decimal, 2 for Roman Numeral: " << endl;
    cin >> entry;
    if (entry == '1')
    {
        cout << "You chose to view the decimal conversion." << endl;
        roman.decimalPrint();

    }
    else if (entry == '2')
    {

        cout << "You chose to view the Roman numeral." << endl;
        roman.romanPrint();
    }
    else
        cout << "Error: bad input" << endl;
    return 0;
    exit(1);

}

在gcc上编译时没有警告:

#include <iostream>
void foo(int i)
{
  std::cout << i << std::endl;
}
int main()
{
  int r;
  std::cin >> r;
  foo(r);
}

而这会生成未初始化的变量warning(正确地):

#include <iostream>
void foo(int i)
{
  std::cout << i << std::endl;
}
int main()
{
  int r;
  foo(r);
  std::cin >> r;
}

编译器输出示例:

/tmp/gcc-explorer-compiler116823-58-135fozf/example.cpp: In function 'int main()':
11 : warning: 'r' is used uninitialized in this function [-Wuninitialized]
foo(r);
^
Compiled ok