2016-12-15 3 views
-1

私はプロジェクトの整数に文字列を型変換しようとしていますが、無効なキャストエラーが続いています。私はキャスティングのためにいくつかの方法を試しましたが、同じエラーが発生し続けます。私は間違って何をしていますか?これをどのように修正できますか?ありがとう!私のコードは以下の通りです。Typecastingエラー

Quarterback::Quarterback(string userInput){ 
    string tempWord; 
    int count = 0; 
    for (int i = 0; i < userInput.length(); i++){ 
     if (userInput[i] == ','){ 
      count++; 
      if (count == 1){ 
       qbName = tempWord; 
       tempWord = ""; 
      } 
      if (count == 2){ 
       passCompletions = (int)tempWord; //Issue occurs here 
       tempWord = ""; 
     } 
     else 
      tempWord += userInput[i]; 
    } 
} 
+0

は 'のstd :: STRING'は' int'に変換することができないことです。それでおしまい。終わり。 –

+1

'string'を' int'に型キャストできないからです。コンパイラは 'string'を' int'に型キャストできないことを(しようとしています)試みています。あなたが間違っていることは '文字列'を 'int'に型キャストすることです。コンパイラのエラーメッセージが不明瞭でしたか? – immibis

+0

CスタイルのキャストをC++で使用しないことをお勧めします。これはCスタイルのキャストで、丸括弧が付きます: 'int x =(int)notAnInt;'。 'int x = static_cast (notAnInt);'を使って、あなたの意図をより明確にします。しかし、それは文字列をintにキャストするのに役立ちません。文字列をintにキャストすることはできません - これについて誰かがまだ言及していますか? –

答えて

3

オブジェクトをプリミティブ変数に変換しようとしています。それは不可能です。 stoi()関数を使う必要があります。

2

文字列のすべての文字をintにキャストできます。すべての文字はASCIIコードの整数値です。文字列クラスには、すべての文字にアクセスする[]演算子があります。 あなたはそのようなあなたのコードのこの部分を変更することができます:あなたは間違って何をやっている

if (count == 2){ 
for(int i=0;i<tempWord.size();i++){ 
      passCompletions += (tempWord[i]-48)*pow(10,(tempWord.size()-i)); 
//48 is the ascii of '0' and this :(tempWord[i]-48) is the characters value and pow(10,(tempWord.size()-i)); is for setting the priority of the number for example 4567 the first character is 4 and your integer variable should be summed with 4000 and next time is 5 and it should be summed with 5*100....... 
      tempWord = ""; 
} 
    } 
関連する問題