2016-09-23 2 views
-6

, так что это мой код, который должен запускаться, но это не так, поскольку я получаю ошибку «неинициализированная локальная переменная» rNumeral «используется» в моем коде здесь, который, я считаю, исходит из main. Не могу понять, почему, что мне не хватает? СпасибоОшибка неинициализированной локальной переменной

#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); 


} 
+0

Инициализировать 'rNumeral'. И удалите это или опубликуйте [mcve], потому что почти весь ваш код не имеет значения. – juanchopanza

+0

Поверьте своему компилятору/времени выполнения: вы, очевидно, используете неинициализированную переменную. Он должен сказать вам, какой из них. Использование неинициализированных переменных - неопределенное поведение в C++. – Bathsheba

+0

Должно быть предупреждение, а не ошибка. – iksemyonov

ответ

0

компилируется без предупреждений на GCC:

#include <iostream> 

void foo(int i) 
{ 
    std::cout << i << std::endl; 
} 

int main() 
{ 
    int r; 
    std::cin >> r; 
    foo(r); 
} 

в то время как это создает неиницализированное переменное предупреждение (справедливо):

#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 
Смежные вопросы