2026-09-15
run_command.cpp
#include <iostream>
#include <string>
void run(char cmd) {
switch (cmd) {
case 'h':
std::string msg = "help";
std::cout << msg << '\n';
break;
case 'q':
std::cout << "quit\n";
break;
}
}
このコードはコンパイルできません。何が問題で、どう直せばよいでしょうか?
Answer
switchの本体は1つのブロックなので、msgのスコープはcase 'q':以降にも続いています。cmd == 'q'のときmsgの初期化を飛び越えて、そのスコープの中へジャンプすることになり、C++ではこれが禁止されています(int n = 1;のような単純な初期化でも同じです)。caseの中身を波括弧で囲み、msgのスコープをそこで閉じれば直ります:
case 'h': {
std::string msg = "help";
std::cout << msg << '\n';
break;
}