鱼C论坛

 找回密码
 立即注册
查看: 2569|回复: 9

求大神改错C++

[复制链接]
发表于 2022-12-15 16:52:08 | 显示全部楼层 |阅读模式
60鱼币
报错信息C:\Users\Lenovo\Desktop\aiXU1.cpp        In function 'void Start()':
133        12        C:\Users\Lenovo\Desktop\aiXU1.cpp        [Error] 'index' was not declared in this scope
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <stdlib.h>
  5. #include <bits/stdc++.h>


  6. // 英雄类
  7. class Hero {
  8. public:
  9.   // 英雄的属性:名字,血量,攻击力,防御力,等级
  10.   std::string name;
  11.   int health;
  12.   int attack;
  13.   int defense;
  14.   int level;


  15.   // 构造函数
  16.   Hero(std::string name, int health, int attack, int defense, int level)
  17.       : name(name), health(health), attack(attack), defense(defense), level(level) {}

  18.   // 普通攻击,计算伤害并返回
  19.   int NormalAttack(Hero& enemy) {
  20.     int damage = attack - enemy.defense;
  21.     // 伤害最低为1
  22.     if (damage < 1) {
  23.       damage = 1;
  24.     }
  25.     enemy.health -= damage;
  26.     return damage;
  27.   }

  28.   // 技能攻击,可以给己方加血或给对方造成伤害
  29.   // 这里简单地定义为给己方加血
  30.   void SkillAttack(Hero& ally) {
  31.     ally.health += 10;
  32.   }

  33.   // 查看己方英雄的属性
  34.   void Show() {
  35.     std::cout << "名字: " << name << std::endl;
  36.     std::cout << "等级: " << level << std::endl;
  37.     std::cout << "血量: " << health << std::endl;
  38.     std::cout << "攻击力: " << attack << std::endl;
  39.     std::cout << "防御力: " << defense << std::endl;
  40.   }
  41. };

  42. // 己方队伍
  43. std::vector<Hero> allies;

  44. // 敌方队伍
  45. std::vector<Hero> enemies;


  46. // 游戏开始
  47. void Start() {
  48.   // 初始化己方队伍
  49.   allies.push_back(Hero("无极剑圣", 100, 10, 5, 1));
  50.   allies.push_back(Hero("蛮族之王", 110, 11, 6, 2));
  51.   allies.push_back(Hero("德邦总管", 120, 12, 7, 3));
  52.   // 初始化敌方队伍
  53. enemies.push_back(Hero("巨魔1", 100, 8, 3, 1));
  54. enemies.push_back(Hero("巨魔2", 110, 9, 4, 2));
  55. enemies.push_back(Hero("巨魔3", 120, 10, 5, 3));
  56. enemies.push_back(Hero("巨魔4", 130, 11, 6, 4));
  57. enemies.push_back(Hero("巨魔5", 140, 12, 7, 5));



  58. // 游戏主循环

  59. bool gameover = false;
  60. while (!gameover) {
  61.   // 选择关卡
  62.   int level;
  63.   std::cout << "请选择关卡(1~5): ";
  64.   std::cin >> level;
  65.   level--; // 敌方队伍的索引是从0开始的
  66.   if (level >= 0 && level < enemies.size()) {
  67.     // 开始战斗
  68.     std::cout << "战斗开始" << std::endl;

  69.     // 判断游戏是否结束
  70.     bool gameover = false;
  71.     while (!gameover) {
  72.       // 己方回合
  73.       std::cout << "己方回合" << std::endl;
  74.       for (auto& ally : allies) {
  75.         std::cout << ally.name << ": " << std::endl;
  76.         // 显示己方英雄属性
  77.         ally.Show();
  78.         std::cout << "请选择攻击方式(1.普通攻击 2.技能攻击): ";
  79.         int choice;
  80.         std::cin >> choice;
  81.         if (choice == 1) {
  82.           // 普通攻击
  83.           int damage = ally.NormalAttack(enemies[level]);
  84.           std::cout << "造成" << damage << "点伤害" << std::endl;
  85.         } else if (choice == 2) {
  86.           // 技能攻击
  87.           ally.SkillAttack(ally);
  88.           std::cout << "使用技能攻击" << std::endl;
  89.         }
  90.         // 敌方队伍阵亡
  91.         if (enemies[level].health <= 0) {
  92.           std::cout << "敌方队伍阵亡" << std::endl;
  93.           gameover = true;
  94.           break;
  95.         }
  96.       }

  97.       // 敌方回合
  98. std::cout << "敌方回合" << std::endl;
  99.       for (auto& enemy : enemies) {
  100.         // 敌方随机选择一个英雄进行攻击
  101.         int index = rand() % allies.size();
  102.         int damage = enemy.NormalAttack(allies[index]);
  103.         std::cout << enemy.name << "对" << allies[index].name << "造成" << damage << "点伤害" << std::endl;
  104.         // 己方队伍阵亡
  105.         if (allies[index].health <= 0) {
  106.           std::cout << "己方队伍阵亡" << std::endl;
  107.           gameover = true;
  108.           break;
  109.         }
  110.       }
  111.     }

  112.     // 战斗结束
  113.     std::cout << "战斗结束" << std::endl;
  114.     // 判断胜负
  115. if (allies[index].health > 0) {
  116.       std::cout << "胜利" << std::endl;
  117.     } else {
  118.       std::cout << "失败" << std::endl;
  119.     }
  120.   } else {
  121.     std::cout << "无效的关卡" << std::endl;
  122.   }

  123. }}
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-12-15 17:15:38 | 显示全部楼层
把index的定义放在while循环外面就行了,你在for循环里定义index只能在for循环里是可见的,出了for循环是是找不到的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-15 18:05:30 | 显示全部楼层
lvk 发表于 2022-12-15 17:15
把index的定义放在while循环外面就行了,你在for循环里定义index只能在for循环里是可见的,出了for循环是是 ...

能帮代码改下吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-12-15 18:42:34 | 显示全部楼层
本帖最后由 lvk 于 2022-12-15 18:43 编辑

  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <stdlib.h>
  5. #include <bits/stdc++.h>

  6. // 英雄类
  7. class Hero
  8. {
  9. public:
  10.     // 英雄的属性:名字,血量,攻击力,防御力,等级
  11.     std::string name;
  12.     int health;
  13.     int attack;
  14.     int defense;
  15.     int level;

  16.     // 构造函数
  17.     Hero(std::string name, int health, int attack, int defense, int level)
  18.         : name(name), health(health), attack(attack), defense(defense), level(level) {}

  19.     // 普通攻击,计算伤害并返回
  20.     int NormalAttack(Hero &enemy)
  21.     {
  22.         int damage = attack - enemy.defense;
  23.         // 伤害最低为1
  24.         if (damage < 1)
  25.         {
  26.             damage = 1;
  27.         }
  28.         enemy.health -= damage;
  29.         return damage;
  30.     }

  31.     // 技能攻击,可以给己方加血或给对方造成伤害
  32.     // 这里简单地定义为给己方加血
  33.     void SkillAttack(Hero &ally)
  34.     {
  35.         ally.health += 10;
  36.     }

  37.     // 查看己方英雄的属性
  38.     void Show()
  39.     {
  40.         std::cout << "名字: " << name << std::endl;
  41.         std::cout << "等级: " << level << std::endl;
  42.         std::cout << "血量: " << health << std::endl;
  43.         std::cout << "攻击力: " << attack << std::endl;
  44.         std::cout << "防御力: " << defense << std::endl;
  45.     }
  46. };

  47. // 己方队伍
  48. std::vector<Hero> allies;

  49. // 敌方队伍
  50. std::vector<Hero> enemies;

  51. // 游戏开始
  52. void Start()
  53. {
  54.     // 初始化己方队伍
  55.     allies.push_back(Hero("无极剑圣", 100, 10, 5, 1));
  56.     allies.push_back(Hero("蛮族之王", 110, 11, 6, 2));
  57.     allies.push_back(Hero("德邦总管", 120, 12, 7, 3));
  58.     // 初始化敌方队伍
  59.     enemies.push_back(Hero("巨魔1", 100, 8, 3, 1));
  60.     enemies.push_back(Hero("巨魔2", 110, 9, 4, 2));
  61.     enemies.push_back(Hero("巨魔3", 120, 10, 5, 3));
  62.     enemies.push_back(Hero("巨魔4", 130, 11, 6, 4));
  63.     enemies.push_back(Hero("巨魔5", 140, 12, 7, 5));

  64.     // 游戏主循环

  65.     bool gameover = false;
  66.     int index = 0;
  67.     while (!gameover)
  68.     {
  69.         // 选择关卡
  70.         int level;
  71.         std::cout << "请选择关卡(1~5): ";
  72.         std::cin >> level;
  73.         level--; // 敌方队伍的索引是从0开始的
  74.         if (level >= 0 && (static_cast<size_t>(level) < enemies.size()))
  75.         {
  76.             // 开始战斗
  77.             std::cout << "战斗开始" << std::endl;

  78.             // 判断游戏是否结束
  79.             bool gameover = false;
  80.             while (!gameover)
  81.             {
  82.                 // 己方回合
  83.                 std::cout << "己方回合" << std::endl;
  84.                 for (auto &ally : allies)
  85.                 {
  86.                     std::cout << ally.name << ": " << std::endl;
  87.                     // 显示己方英雄属性
  88.                     ally.Show();
  89.                     std::cout << "请选择攻击方式(1.普通攻击 2.技能攻击): ";
  90.                     int choice;
  91.                     std::cin >> choice;
  92.                     if (choice == 1)
  93.                     {
  94.                         // 普通攻击
  95.                         int damage = ally.NormalAttack(enemies[level]);
  96.                         std::cout << "造成" << damage << "点伤害" << std::endl;
  97.                     }
  98.                     else if (choice == 2)
  99.                     {
  100.                         // 技能攻击
  101.                         ally.SkillAttack(ally);
  102.                         std::cout << "使用技能攻击" << std::endl;
  103.                     }
  104.                     // 敌方队伍阵亡
  105.                     if (enemies[level].health <= 0)
  106.                     {
  107.                         std::cout << "敌方队伍阵亡" << std::endl;
  108.                         gameover = true;
  109.                         break;
  110.                     }
  111.                 }

  112.                 // 敌方回合
  113.                 std::cout << "敌方回合" << std::endl;
  114.                 for (auto &enemy : enemies)
  115.                 {
  116.                     // 敌方随机选择一个英雄进行攻击
  117.                     index = rand() % allies.size();
  118.                     int damage = enemy.NormalAttack(allies[index]);
  119.                     std::cout << enemy.name << "对" << allies[index].name << "造成" << damage << "点伤害" << std::endl;
  120.                     // 己方队伍阵亡
  121.                     if (allies[index].health <= 0)
  122.                     {
  123.                         std::cout << "己方队伍阵亡" << std::endl;
  124.                         gameover = true;
  125.                         break;
  126.                     }
  127.                 }
  128.             }

  129.             // 战斗结束
  130.             std::cout << "战斗结束" << std::endl;
  131.             // 判断胜负
  132.             if (allies[index].health > 0)
  133.             {
  134.                 std::cout << "胜利" << std::endl;
  135.             }
  136.             else
  137.             {
  138.                 std::cout << "失败" << std::endl;
  139.             }
  140.         }
  141.         else
  142.         {
  143.             std::cout << "无效的关卡" << std::endl;
  144.         }
  145.     }
  146. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-15 20:15:30 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-12-15 20:18:54 | 显示全部楼层
报什么错,是不是类似这样的:
  1. undefined reference to `WinMain'
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-15 20:23:22 | 显示全部楼层
lvk 发表于 2022-12-15 20:18
报什么错,是不是类似这样的:

是的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-12-15 20:29:49 | 显示全部楼层
我以为你的主函数在别的文件里,原来你根本没写
你在那些代码的最下面添加一个主函数就行:

  1. int main()
  2. {
  3.     /*这里调用你想调用的函数*/
  4.    
  5.     return 0;
  6. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-12-15 21:36:46 | 显示全部楼层
本帖最后由 zhangjinxuan 于 2022-12-15 21:41 编辑
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <stdlib.h>
  5. #include <bits/stdc++.h>

  6. // 英雄类
  7. class Hero
  8. {
  9. public:
  10.     // 英雄的属性:名字,血量,攻击力,防御力,等级
  11.     std::string name;
  12.     int health;
  13.     int attack;
  14.     int defense;
  15.     int level;

  16.     // 构造函数
  17.     Hero(std::string name, int health, int attack, int defense, int level)
  18.         : name(name), health(health), attack(attack), defense(defense), level(level) {}

  19.     // 普通攻击,计算伤害并返回
  20.     int NormalAttack(Hero &enemy)
  21.     {
  22.         int damage = attack - enemy.defense;
  23.         // 伤害最低为1
  24.         if (damage < 1)
  25.         {
  26.             damage = 1;
  27.         }
  28.         enemy.health -= damage;
  29.         return damage;
  30.     }

  31.     // 技能攻击,可以给己方加血或给对方造成伤害
  32.     // 这里简单地定义为给己方加血
  33.     void SkillAttack(Hero &ally)
  34.     {
  35.         ally.health += 10;
  36.     }

  37.     // 查看己方英雄的属性
  38.     void Show()
  39.     {
  40.         std::cout << "名字: " << name << std::endl;
  41.         std::cout << "等级: " << level << std::endl;
  42.         std::cout << "血量: " << health << std::endl;
  43.         std::cout << "攻击力: " << attack << std::endl;
  44.         std::cout << "防御力: " << defense << std::endl;
  45.     }
  46. };

  47. // 己方队伍
  48. std::vector<Hero> allies;

  49. // 敌方队伍
  50. std::vector<Hero> enemies;

  51. // 游戏开始
  52. void Start()
  53. {
  54.     // 初始化己方队伍
  55.     allies.push_back(Hero("无极剑圣", 100, 10, 5, 1));
  56.     allies.push_back(Hero("蛮族之王", 110, 11, 6, 2));
  57.     allies.push_back(Hero("德邦总管", 120, 12, 7, 3));
  58.     // 初始化敌方队伍
  59.     enemies.push_back(Hero("巨魔1", 100, 8, 3, 1));
  60.     enemies.push_back(Hero("巨魔2", 110, 9, 4, 2));
  61.     enemies.push_back(Hero("巨魔3", 120, 10, 5, 3));
  62.     enemies.push_back(Hero("巨魔4", 130, 11, 6, 4));
  63.     enemies.push_back(Hero("巨魔5", 140, 12, 7, 5));

  64.     // 游戏主循环

  65.     bool gameover = false;
  66.     int index = 0;
  67.     while (!gameover)
  68.     {
  69.         // 选择关卡
  70.         int level;
  71.         std::cout << "请选择关卡(1~5): ";
  72.         std::cin >> level;
  73.         level--; // 敌方队伍的索引是从0开始的
  74.         if (level >= 0 && (static_cast<size_t>(level) < enemies.size()))
  75.         {
  76.             // 开始战斗
  77.             std::cout << "战斗开始" << std::endl;

  78.             // 判断游戏是否结束
  79.             bool gameover = false;
  80.             while (!gameover)
  81.             {
  82.                 // 己方回合
  83.                 std::cout << "己方回合" << std::endl;
  84.                 for (auto &ally : allies)
  85.                 {
  86.                     std::cout << ally.name << ": " << std::endl;
  87.                     // 显示己方英雄属性
  88.                     ally.Show();
  89.                     std::cout << "请选择攻击方式(1.普通攻击 2.技能攻击): ";
  90.                     int choice;
  91.                     std::cin >> choice;
  92.                     if (choice == 1)
  93.                     {
  94.                         // 普通攻击
  95.                         int damage = ally.NormalAttack(enemies[level]);
  96.                         std::cout << "造成" << damage << "点伤害" << std::endl;
  97.                     }
  98.                     else if (choice == 2)
  99.                     {
  100.                         // 技能攻击
  101.                         ally.SkillAttack(ally);
  102.                         std::cout << "使用技能攻击" << std::endl;
  103.                     }
  104.                     // 敌方队伍阵亡
  105.                     if (enemies[level].health <= 0)
  106.                     {
  107.                         std::cout << "敌方队伍阵亡" << std::endl;
  108.                         gameover = true;
  109.                         break;
  110.                     }
  111.                 }

  112.                 // 敌方回合
  113.                 std::cout << "敌方回合" << std::endl;
  114.                 for (auto &enemy : enemies)
  115.                 {
  116.                     // 敌方随机选择一个英雄进行攻击
  117.                     index = rand() % allies.size();
  118.                     int damage = enemy.NormalAttack(allies[index]);
  119.                     std::cout << enemy.name << "对" << allies[index].name << "造成" << damage << "点伤害" << std::endl;
  120.                     // 己方队伍阵亡
  121.                     if (allies[index].health <= 0)
  122.                     {
  123.                         std::cout << "己方队伍阵亡" << std::endl;
  124.                         gameover = true;
  125.                         break;
  126.                     }
  127.                 }
  128.             }

  129.             // 战斗结束
  130.             std::cout << "战斗结束" << std::endl;
  131.             // 判断胜负
  132.             if (allies[index].health > 0)
  133.             {
  134.                 std::cout << "胜利" << std::endl;
  135.             }
  136.             else
  137.             {
  138.                 std::cout << "失败" << std::endl;
  139.             }
  140.         }
  141.         else
  142.         {
  143.             std::cout << "无效的关卡" << std::endl;
  144.         }
  145.     }
  146. }
  147. int main() {
  148.     Start();
  149.     return 0;
  150. }
复制代码

可以看懂报错信息才是最重要的啊

第一个报错的意思是:index未定义,第二个报错的意思是没有定义主函数,要注意,只要是一个单独的程序(没有在自定义头,没有链接什么),一定得写 main 或者Winmain
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-12-26 15:10:59 | 显示全部楼层
你的main函数呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 23:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表