[解決済み] テスト
2022-01-29 10:23:36
質問
StackOverflowや複数のGoogleのリンクで私の問題を調べましたが、まだ混乱しています。私は自分にとって最良のことは、尋ねることだと思った...
簡単なコマンドライン電卓を作成しています。以下は、これまでの私のコードです。
const std::string Calculator::SIN("sin");
const std::string Calculator::COS("cos");
const std::string Calculator::TAN("tan");
const std::string Calculator::LOG( "log" );
const std::string Calculator::LOG10( "log10" );
void Calculator::set_command( std::string cmd ) {
for(unsigned i = 0; i < cmd.length(); i++)
{
cmd[i] = tolower(cmd[i]);
}
command = cmd;
}
bool Calculator::is_legal_command() const {
switch(command)
{
case TAN:
case SIN:
case COS:
case LOG:
case LOG10:
return true;
break;
default:
return false;
break;
}
}
というエラーが表示されます。
Calculator.cpp: In member function 'bool Calculator::is_trig_command() const':
Calculator.cpp: error: switch quantity not an integer
Calculator.cpp: error: 'Calculator::TAN' cannot appear in a constant-expression
Calculator.cpp: error: 'Calculator::SIN' cannot appear in a constant-expression
Calculator.cpp: error: 'Calculator::COS' cannot appear in a constant-expression
マイティーインターネットでは、switch文に文字列が使えると書いてありますね。
皆さん、ありがとうございます。
解決方法は?
で
switch
である必要があります。
積分型
または積分型への明確な変換が可能なクラス型であること" (
VS2008のドキュメントを引用
).
文字列クラスは、quot;unambiguous conversion to integral type" を持ちません。
char
があります。
回避策として
-
を作成します。
map<string, int>
を作成し、マップの値を切り替えます。switch(command_map[command])
` -
のセットを行う。
if
/else
スイッチの代わりに ずっと煩わしいし、読みにくいので、地図ルートをお勧めします。
余談ですが、このような本当に複雑なロジックの場合、さらに良い解決策は、マッピングソリューションを改良して
switch
を完全に削除し、代わりに関数ルックアップを使用するようにしました。
std::map<std::string, functionPointerType>
. これは、あなたの特定のケースには必要ないかもしれませんが、複雑で非常に長いルックアップ・ロジックでは非常に高速です。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】coutはstdのメンバではない
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み】switch文が文字列に適用できない理由とは?