次のプログラムを実行したら
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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
switch文のエラーについて
C言語・C++・C#
-
C言語初心者の質問失礼します。
C言語・C++・C#
-
C言語のポインターに関する警告
C言語・C++・C#
-
-
4
char*を初期化したいのですが
C言語・C++・C#
-
5
switch文で文字を比較することは出来ませんか?
C言語・C++・C#
-
6
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
7
Cのエラー
C言語・C++・C#
-
8
ポインター引数の関数でコンパイルエラーが出る。
C言語・C++・C#
-
9
C言語でヘッダファイルにグローバル変数を宣言する
C言語・C++・C#
-
10
main.c:7:43: warning: implicit declaration of func
C言語・C++・C#
-
11
c言語 Arduino 作成したコードを実行してみたところ,エラーが出てしまいました。どうすれば良い
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
enumの値から定義名を文字列化...
-
std::wstringのメモリリークに...
-
2重の(?)の#include
-
VC++で文字列から任意の文字を...
-
CComBSTR型文字列の
-
boost::lexical_castで16進数文...
-
【C++】複素数で配列を使いたい
-
findnext();について
-
Linux Ubuntu19.10でQt5.14.1の...
-
C言語からgnuplot呼び出し
-
std::map の const 修飾について
-
構文エラーが出ているのですが...
-
#include "fstream.h"
-
アンワインド セマンティクス
-
ハミング符号の解読について
-
C++のifstreamの使い方
-
構造体配列のvectorへの変換と...
-
C++で大量のエラーが出る
-
このプログラミング誰か教えて...
-
C++で、テキストファイルを一行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラーが出ているのですが...
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
switch文のエラーについて
-
空ENTERの判別
-
なぜ、C++の標準ヘッダをインク...
-
【C++】ヘッダ内でstringを格納...
-
C++での <iostream.h>と<iostre...
-
#include "fstream.h"
-
#define中の#のエスケープ
-
JPEGやPNGが読めるLoadImage関数
-
リモートデスクトップの接続元I...
-
CStringとString
-
string型のフォーマット書式指...
-
std::map の const 修飾について
-
VHDLのsignedとunsignedの違いは?
-
このプログラミング誰か教えて...
-
構造体配列のvectorへの変換と...
-
指定した文字を削除したい
-
構造体に決められた文字列を入...
おすすめ情報