アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下の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");
 }
}

質問者からの補足コメント

  • ごめんなさい^^;
    タイプミスです。defaultの後には、:(コロン)はあります。

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/02/24 21:03

A 回答 (4件)

よだん.



「error("Bad token");」が「"Bad token" を引数として関数 error を呼び出す」ことを意味するのであれば, 関数 error の宣言に noreturn 属性を付ければいいかもよ.
    • good
    • 1

「error()例外を呼び出せるように」というのは, どのような動作を意図しているんだ? 「例外」は「送り出す」ものであって「呼び出す」ものではない.



throw で例外を送り出せば return はしなくていい. ただし例外に対処しないとプログラムが強制的に終了する.
    • good
    • 0

ちゃんと最後returnにするか、警告を無視するプラグマを記述するかでよいのでは。


お勧めはちゃんとreturnすること。
    • good
    • 0

以下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文に対応するカッコも修正されました。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!