
以下のC++の構文で、
Non-void function does not return a value in all control paths
のエラーが出るのですが、
最後のdefaultの所で、Token型を返してないからだと思われるのですが、
エラーを発生させないで、error()例外を呼び出せるように書く方法とかあるのでしょうか?
Token get_token() // read a token from cin
{
char ch;
cin >> ch; // note that >> skips whitespace (space, newline, tab, etc.)
switch (ch) {
//not yet case ';': // for "print"
//not yet case 'q': // for "quit"
case '(': case ')': case '+': case '-': case '*': case '/':
return Token(ch); // let each character represent itself
case '.':
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
cin.putback(ch); // put digit back into the input stream
double val;
cin >> val; // read a floating-point number
return Token('8', val); // let '8' represent "a number"
}
default
error("Bad token");
}
}
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
よだん.
「error("Bad token");」が「"Bad token" を引数として関数 error を呼び出す」ことを意味するのであれば, 関数 error の宣言に noreturn 属性を付ければいいかもよ.
No.3
- 回答日時:
「error()例外を呼び出せるように」というのは, どのような動作を意図しているんだ? 「例外」は「送り出す」ものであって「呼び出す」ものではない.
throw で例外を送り出せば return はしなくていい. ただし例外に対処しないとプログラムが強制的に終了する.

No.1
- 回答日時:
以下AIの回答
私はプログラミングわからないです
--
このコードには、switch文のdefaultラベルの後ろにコロンがないため、コンパイルエラーが発生する可能性があります。この問題を解決するために、以下のように修正できます。
Token get_token() // read a token from cin
{
char ch;
cin >> ch; // note that >> skips whitespace (space, newline, tab, etc.)
switch (ch) {
//not yet case ';': // for "print"
//not yet case 'q': // for "quit"
case '(': case ')': case '+': case '-': case '*': case '/':
return Token(ch); // let each character represent itself
case '.':
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
cin.putback(ch); // put digit back into the input stream
double val;
cin >> val; // read a floating-point number
return Token('8', val); // let '8' represent "a number"
}
default:
error("Bad token");
}
}
修正後、defaultラベルの後ろにコロンがあるため、コンパイルエラーが解消されます。また、switch文に対応するカッコも修正されました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C++のcinの動作
- This has not yet been proven to be the case for an
- いつもお世話になります 下記のコード実行すると エラーになります わかるかた教えてくれませんでしょう
- jsで、switch文で書かれた分をif文にできませんか。
- Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。
- エクセルのVBAでダブルクリックでチェックを入れたあと
- switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。
- select caseの入れ子
- カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい
- Excelのマクロについて教えてください。
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Win32APIでウィンドウを中央に...
-
LoadImageを使用し、タイトルバ...
-
エディットボックスの背景の色...
-
ゲームとかの解像度変更&全画...
-
Windowsタスクバーにツールバー...
-
プログラミングでエラーが出ま...
-
ダイアログプログラムでEnterキ...
-
C言語win32api、エディットボッ...
-
Win32 APIでのVirtual-Key Co...
-
C言語について。
-
信頼区間の1.96や1.65ってどこ...
-
EXCELの分散分析表のP-値が....
-
プログラムでの数字につく”f”の...
-
ループを途中で抜けたいのですが。
-
2÷3などの余りについて
-
Enterキーを押されたら次の処理...
-
C言語での引数の省略方法
-
【gcc・cygwin】multiple defin...
-
複数桁10進数の*桁目だけを抽出...
-
C言語 エラーの原因がわからな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラー Run-Time Check Failur...
-
Win32APIでウィンドウを中央に...
-
キャレットの現在位置の表示 (W...
-
C言語win32api、エディットボッ...
-
C#のswitch文を簡略化したいの...
-
音量調節
-
LoadImageを使用し、タイトルバ...
-
LoadImageとSetCursorについて
-
COMPORTマルチスレッドで例外発生
-
ボタンの色(WINAPI)
-
ゲームとかの解像度変更&全画...
-
オーバーレイみたいな処理がしたい
-
エディットボックスの背景の色...
-
コンソールアプリケーションの...
-
ダイアログプログラムでEnterキ...
-
エディットコントロール入力時...
-
1~1000,1001~2000の間に素数が...
-
ツリーコントロールの開閉アイ...
-
PeekMessageについて
-
MoveToExとLineToについて
おすすめ情報
ごめんなさい^^;
タイプミスです。defaultの後には、:(コロン)はあります。