• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:switch文のエラーについて)

解決策: switch文のエラーについて

このQ&Aのポイント
  • switch文のエラーが発生する原因として、switchの式で整数型を使用する必要がある点が挙げられます。
  • このプログラムでは、setBloodメソッドの引数としてstring型の変数が使用されていますが、switch文は整数型にしか対応していません。
  • したがって、setBloodメソッドで受け取った文字列を整数型に変換する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • momenlara
  • ベストアンサー率60% (6/10)
回答No.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文で判定するように仕様を変更する。 この方法でも、入力が文字列しかない場合には、どこかで文字列の中身を判定して、定数に置き換えないといけませんけどね。

zero-0
質問者

お礼

If文使ってやることにしました。 アドバイスありがとうございます。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

エラーメッセージに書いてありますよ。 「switchの量が整数じゃない」 switch(string型)はだめです。 ifを使いましょう。

zero-0
質問者

お礼

if文を使ってみます。 ご意見ありがとうございます。

zero-0
質問者

補足

ここだけ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)
回答No.1

今手元にコンパイラがないのでチェックしてませんが おや?と思ったのが switchは1バイト文字しか認識できないような。 case 'AB'; が駄目なような気がします。 間違ってたらごめんなさい。 でもここも間違っている気がします。

関連するQ&A