• 这个c++程序到底错在哪里了?


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 2401_84999602 2024-05-29 17:37 采纳率: 50% 浏览 3 首页/ 编程语言 / 这个c++程序到底错在哪里了? c++ 这个c++程序到底错在哪里了,我怎么都解决不了,不知道到底错在哪里了,谁能解答下啊 #include #include #include #include #include // 假设这是你的升级函数 void upgradeBuilding(int timeToUpgrade, std::condition_variable& cv, std::mutex& mtx) { std::unique_lock lock(mtx); std::cout << "开始升级建筑..." << std::endl; // 使用for循环来模拟倒计时 for (int i = timeToUpgrade; i >= 0; --i) { std::cout << "剩余时间: " << i << " 秒" << std::endl; // 模拟等待一秒 std::this_thread::sleep_for(std::chrono::seconds(1)); // 如果时间到了,则完成升级并通知主线程 if (i == 0) { std::cout << "建筑升级完成!" << std::endl; cv.notify_one(); return; } } } int main() { int upgradeTime = 5; // 假设建筑升级需要5秒 std::condition_variable cv; std::mutex mtx; // 创建一个新的线程来执行升级函数 std::thread upgradeThread(upgradeBuilding, upgradeTime, std::ref(cv), std::ref(mtx)); // 在这里,你可以添加额外的操作,例如: std::cout << "主函数正在执行其他任务..." << std::endl; std::this_thread::sleep_for(std::chrono::seconds(3)); // 暂停主线程3秒 // 使用条件变量等待升级线程完成 std::unique_lock lock(mtx); cv.wait(lock); std::cout << "所有任务已完成!" << std::endl; // 确保升级线程已经结束 upgradeThread.join(); return 0; } 以下是出现的错误,怎么回事啊?还19处错误啊 Compile error: /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:21:54: error: expected '}' auto elapsedTime = std::chrono::d ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:6:16: note: to match this '{' class Building { ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:8:33: error: member initializer 'upgradeDuration' does not name a non-static data member or base class Building(int upgradeTime) : upgradeDuration(upgradeTime), currentProgress(0), isUpgrading(false) {} // 初始化列表中初始化成员变量 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:8:63: error: member initializer 'currentProgress' does not name a non-static data member or base class Building(int upgradeTime) : upgradeDuration(upgradeTime), currentProgress(0), isUpgrading(false) {} // 初始化列表中初始化成员变量 ^~~~~~~~~~~~~~~~~~ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:8:83: error: member initializer 'isUpgrading' does not name a non-static data member or base class Building(int upgradeTime) : upgradeDuration(upgradeTime), currentProgress(0), isUpgrading(false) {} // 初始化列表中初始化成员变量 ^~~~~~~~~~~~~~~~~~ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:11:14: error: use of undeclared identifier 'isUpgrading' if (!isUpgrading()) { // 调用成员函数检查是否正在升级 ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:12:13: error: use of undeclared identifier 'isUpgrading' isUpgrading = true; // 设置为正在升级 ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:13:13: error: use of undeclared identifier 'upgradeThread' upgradeThread = std::thread([this]() mutable { // 添加 mutable 关键字允许修改捕获的变量 ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:14:17: error: use of undeclared identifier 'currentProgress' currentProgress = 0; ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:17:42: error: use of undeclared identifier 'upgradeDuration' while (currentProgress < upgradeDuration) { ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:17:24: error: use of undeclared identifier 'currentProgress' while (currentProgress < upgradeDuration) { ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:19:21: error: use of undeclared identifier 'currentProgress' currentProgress++; ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:21:53: error: no member named 'd' in namespace 'std::chrono' auto elapsedTime = std::chrono::d ~~~~~~~~~~~~~^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:21:54: error: expected ';' at end of declaration auto elapsedTime = std::chrono::d ^ ; /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:21:54: error: expected '}' /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:17:59: note: to match this '{' while (currentProgress < upgradeDuration) { ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:21:54: error: expected '}' auto elapsedTime = std::chrono::d ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:13:58: note: to match this '{' upgradeThread = std::thread([this]() mutable { // 添加 mutable 关键字允许修改捕获的变量 ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:21:54: error: expected ')' auto elapsedTime = std::chrono::d ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:13:40: note: to match this '(' upgradeThread = std::thread([this]() mutable { // 添加 mutable 关键字允许修改捕获的变量 ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:21:54: error: expected '}' auto elapsedTime = std::chrono::d ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:11:29: note: to match this '{' if (!isUpgrading()) { // 调用成员函数检查是否正在升级 ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:21:54: error: expected '}' auto elapsedTime = std::chrono::d ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:10:25: note: to match this '{' void startUpgrade() { ^ /storage/emulated/0/Android/data/com.cscjapp.cppide/files/CJ_IDE/CPPProject/默认目录/局部变量/src/游戏0001.cpp:21:54: error: expected ';' after class auto elapsedTime = std::chrono::d ^ ; 19 errors generated. 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    2条回答 默认 最新

    • 阿里嘎多学长 2024-05-29 17:37
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      从你提供的错误信息来看,编译错误并不是由你展示的C++程序引起的,而是由于其他部分的代码。错误信息中提到的类Building和方法startUpgrade并不在你提供的代码片段中,这表明你的项目中还有其他的源文件或代码段导致了这些错误。

      以下是根据错误信息,你可以采取的一些解决步骤:

      1. 检查类定义:确保Building类的所有成员变量都已经在类内部声明,并且构造函数中的初始化列表正确地初始化了这些成员。

      2. 检查未声明的标识符:错误信息中提到了isUpgrading, upgradeThread, currentProgress, upgradeDuration等标识符未声明。你需要确保这些成员函数或变量在你使用它们之前已经被正确地声明。

      3. 检查条件变量的使用:错误信息中并没有提到条件变量使用上的错误,但是你提供的代码中确实使用了std::condition_variable。确保在调用cv.wait(lock)之前,锁lock是有效的,并且条件变量cv已经被正确初始化。

      4. 检查std::chrono的使用:错误信息中提到了std::chrono::d,这显然是一个不完整的代码,应该是std::chrono::duration或者std::chrono::high_resolution_clock等。你需要检查这一行代码并补全它。

      5. 检查代码的完整性:错误信息表明可能有代码块没有正确闭合,例如缺少}或者;。检查你的代码,确保所有的代码块都有配对的结束符号,所有的声明后都有分号。

      6. 检查文件包含:如果Building类定义在另一个文件中,确保正确地包含了这个文件。

      7. 清理项目和重建:有时候,编译器的缓存可能会导致一些奇怪的错误。尝试清理你的项目并重新构建。

      8. 使用IDE的诊断功能:如果你使用的是集成开发环境(IDE),它通常会提供更详细的错误信息和代码定位,这有助于快速找到并解决问题。

      由于你没有提供完整的代码,我只能根据错误信息给出这些建议。如果你能提供更多的代码或者错误发生的上下文,我可能能提供更具体的帮助。

      至于参考资料,你可以查看C++标准库的官方文档,特别是关于, , , 和 的部分。这些文档通常可以在C++标准库的官方网站或者像cppreference.com这样的在线参考手册中找到。

      希望这些信息对你有帮助!如果还有其他问题,欢迎继续提问。

      展开全部

      评论 编辑记录
    • 为荣誉而拼搏少年 2024-05-29 20:54
      关注

      虽然看不出错误
      但建议你加上using namespace std;
      在第6行
      这样你的程序中的std::多不用写了

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    【Linux 】向Shell脚本传递参数、getopts、getopt
    为什么要学Selenium自动化测试?
    【技术】技术研发人员面试IT公司顺利通过的小技巧
    mysql 时间字段默认设置为当前时间
    Linux权限管理
    C#:Bitmap类使用方法—第1讲
    伦敦银现货市场如何使用多条均线?
    现代GPGPU 架构汇总
    剑指 Offer 61. 扑克牌中的顺子
    自定义类型:结构体
  • 原文地址:https://ask.csdn.net/questions/8111245