You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++语法错误:第37行大括号}前缺失分号问题排查

C++控制台游戏编译报错修复方案

错误原因

编译器提示第37行'}'前缺失';'是误导性报错,真正问题有4个:

  • 代码中两处双引号包裹的字符串字面量被直接物理换行拆分,C++语法不允许未经处理的字符串跨物理行书写,编译器解析到断行位置时语法状态异常,最终把错误定位到了后续的大括号位置。
  • 你自行添加的整行星号*****************************************属于非法语法,不在C++合法token范围内。
  • 购买铲子的余额判断逻辑写反:当前写的if (balance > 100)是余额大于100时提示买不起,和业务逻辑完全相反。
  • 代码开头缺失必要头文件引用,即使修复上述问题,直接编译也会报cin/cout/string未定义的错误。

修复步骤

  1. 在代码最顶部补充缺失的头文件:
#include <iostream>
#include <string>
using namespace std;
  1. 删除你标记位置添加的整行星号。
  2. 修正跨行长字符串:相邻的双引号字符串字面量C++会自动拼接,长文本可以拆成多段分别用双引号包裹,不需要额外拼接符。修复后的/help分支输出代码:
if (command == "/help") {
    cout << "The list of commands are \n /buy shovel \n /buy lawnmower \n /sell "
            "shovel \n /sell lawnbower \n /luck \n \n /exit /rob \n /balance \n /invest \n /dig \n "
            "/mow" << endl;
}
  1. 把余额不足提示的cout语句写在同一行,不要把<< endl拆到下一行,同时把判断条件改为balance < 100,修复后购买铲子的分支代码:
else if (command == "/buy shovel") {
    // checking if they have enough balance
    if (balance < 100) {
        cout << "You don't have enough to buy a shovel. It costs 100 memers." << endl;
    }
    // giving them the shovel
    else {
        balance -= 100;
        hasShovel = true;
        cout << "You have a shovel now. Happy digging!" << endl;
    }
}

注:C++编译报错的行号经常不是问题真正出现的位置,编译器解析到后续位置才发现语法不匹配时,会把错误标在它解析失败的点位,找错的时候可以往报错点之前的位置排查字符串、括号配对问题。

内容的提问来源于stack exchange,提问作者ComplexJS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 03:06:11