2016-09-23 22 views
-6

があるので、これは実行するはずのコードですが、 "初期化されていないローカル変数 'rNumeral'がここからコードとして使用されています。どうして私は行方不明ですか?ありがとう初期化されていないローカル変数でエラー

これはgccの上、警告なしでコンパイル
#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

あなたのコンパイラ/ランタイムを信じてください:あなたは明らかに初期化されていない変数を使用しています。それはあなたにどの1つを伝えるべきです。初期化されていない変数を使用することは、C++では未定義の動作です。 – Bathsheba

+0

エラーではなく、警告でなければなりません。 – iksemyonov

答えて

0

#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 
関連する問題