
次のプログラムを実行したら
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;
}
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文で判定するように仕様を変更する。
この方法でも、入力が文字列しかない場合には、どこかで文字列の中身を判定して、定数に置き換えないといけませんけどね。
No.2
- 回答日時:
エラーメッセージに書いてありますよ。
「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;
}
}
No.1
- 回答日時:
今手元にコンパイラがないのでチェックしてませんが
おや?と思ったのが
switchは1バイト文字しか認識できないような。
case 'AB';
が駄目なような気がします。
間違ってたらごめんなさい。
でもここも間違っている気がします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
iostream インクルード時に発生...
-
C++でShowCursorを使いたい。
-
C++でUNDOを実装しようとしてい...
-
なぜ、C++の標準ヘッダをインク...
-
#defineの使い方について
-
switch文のエラーについて
-
VC++ iostreamの不具合(?)
-
OpenCVでRAW画像(カラー)を開...
-
vectorのイテレータを大小比較...
-
c++で、cvMatからvectorへの変...
-
C言語のポインターで詰まっている
-
std::map の const 修飾について
-
構文エラーが出ているのですが...
-
c++のvirtual関数および継承に...
-
openCVで動画が読み込めないエ...
-
Enterキーを押されたら次の処理...
-
エクセルで可視セルにのみ値貼...
-
2÷3などの余りについて
-
*をユーザーが入力した数字の数...
-
Aの値からBの値を除するとは??
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
なぜ、C++の標準ヘッダをインク...
-
switch文のエラーについて
-
VC++で文字列から任意の文字を...
-
構文エラーが出ているのですが...
-
gccでコンパイル時のエラー
-
空ENTERの判別
-
vectorのイテレータを大小比較...
-
JPEGやPNGが読めるLoadImage関数
-
C++で、テキストファイルを一行...
-
std::wstringのメモリリークに...
-
enumの値から定義名を文字列化...
-
CStringとString
-
#define中の#のエスケープ
-
std::map の const 修飾について
-
#include "fstream.h"
-
_tcscat がうまくいきません(V...
-
C言語のポインターで詰まっている
-
構造体配列のvectorへの変換と...
-
C++での <iostream.h>と<iostre...
-
ヘッダーファイルがインクルー...
おすすめ情報