プロが教えるわが家の防犯対策術!

次のプログラムを実行したら
slect.cpp:In member function `void select::setBlood(std::string)':
slect.cpp:16:error: switch quantity not an integer
が出ました。switch文の何が不完全ですか?教えてください。

#include<iostream>
#include<string>
using namespace std;

class select
{
private:
string blood;
public:
void setBlood(string b);
void show();
};

void select::setBlood(string b){
blood=b;
switch(b){
case 'A':
cout<<"A is best"<<endl;
break;
case 'B':
cout<<"B is best"<<endl;
break;
case 'AB':
cout<<"AB is best"<<endl;
break;
case 'O':
cout<<"O is best"<<endl;
break;
default:
cout<<"crazy"<<endl;
break;
}

}


void select::show(){
cout<<"Your blood type is :"<<blood<<endl;
}

int main(){
string b;
select Q;
cout<<"Please Input your Blood type in A or B or AB or O:"<<endl;
cin>>b;
Q.setBlood(b);
Q.show();
return 0;
}

A 回答 (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文で判定するように仕様を変更する。
この方法でも、入力が文字列しかない場合には、どこかで文字列の中身を判定して、定数に置き換えないといけませんけどね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/01/09 20:36

エラーメッセージに書いてありますよ。


「switchの量が整数じゃない」
switch(string型)はだめです。
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;
}

}

補足日時:2009/01/09 20:30
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/01/09 20:37

今手元にコンパイラがないのでチェックしてませんが


おや?と思ったのが
switchは1バイト文字しか認識できないような。
case 'AB';
が駄目なような気がします。

間違ってたらごめんなさい。
でもここも間違っている気がします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています