- ベストアンサー
解決策: switch文のエラーについて
- switch文のエラーが発生する原因として、switchの式で整数型を使用する必要がある点が挙げられます。
- このプログラムでは、setBloodメソッドの引数としてstring型の変数が使用されていますが、switch文は整数型にしか対応していません。
- したがって、setBloodメソッドで受け取った文字列を整数型に変換する必要があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> switch(b) switch文の条件に指定できるのは「整数」のみになります。 上記のソースでは、bがstringなのでコンパイルエラーになっています。 いくつか修正方法がありますが、一般的には以下の2つが妥当でしょうか。 1) if文で判定する if(b.compare("A") == 0){ cout<<"A is best"<<endl; } else if (b.compare("B") == 0) { cout<<"B is best"<<endl; } ... 2) 定数を使う あらかじめ血液型に対して定数を割り当てておきます。 #define BLOOD_A 1 #define BLOOD_B 2 ... setBlood(int b)として、このメソッドでは上記の定数のいずれかを受け取り、switch文で判定するように仕様を変更する。 この方法でも、入力が文字列しかない場合には、どこかで文字列の中身を判定して、定数に置き換えないといけませんけどね。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10358)
エラーメッセージに書いてありますよ。 「switchの量が整数じゃない」 switch(string型)はだめです。 ifを使いましょう。
お礼
if文を使ってみます。 ご意見ありがとうございます。
補足
ここだけif文に直してみたんですがこのようなエラーが出ました。 select.cpp: In member function `void select::setBlood(std::string)': 123.cpp:16: error: could not convert `(&b)->std::basic_string<_CharT, _Traits, _ Alloc>::operator= [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](65)' to `bool' selct.cpp:19: error: could not convert `(&b)->std::basic_string<_CharT, _Traits, _ Alloc>::operator= [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](66)' to `bool' ここからif文 void select::setBlood(string b){ blood=b; if(b='A'){ cout<<"A is best"<<endl; } else if(b='B'){ cout<<"B is good"<<endl; } else{ cout<<"crazy"<<endl; } }
- 5S6
- ベストアンサー率29% (675/2291)
今手元にコンパイラがないのでチェックしてませんが おや?と思ったのが switchは1バイト文字しか認識できないような。 case 'AB'; が駄目なような気がします。 間違ってたらごめんなさい。 でもここも間違っている気がします。
お礼
If文使ってやることにしました。 アドバイスありがとうございます。