VEX C++机器人代码报main函数重定义错误 删除任意main仍报错如何解决
问题原因
C++ 规范要求全局范围内只能存在一个 main 函数作为程序唯一入口,你当前代码里重复定义了两次 int main(),所以编译器直接抛出重定义错误。
你删除任意一个main都会报错的原因也很明确:
- 如果你删除上方带事件注册逻辑的main,你写的控制器轴事件绑定逻辑不会执行,符合VEX运行规则但不符合你的功能需求
- 如果你删除下方带
vexcodeInit()的main,VEX硬件初始化逻辑缺失,程序无法正常初始化机器人设备,自然会报错
修复方案
直接将两个main函数的逻辑合并,删除重复的冗余代码即可,具体修改步骤:
- 保留最上方的
#include "vex.h"和using namespace vex;,删除下方设备配置注释之后重复的这两行代码 - 将下方main函数里的
vexcodeInit();语句挪到上方main函数的第一行 - 删掉下方整个重复的main函数
修改后的完整代码如下:
#include "vex.h" // Allows for easier use of the VEX Library using namespace vex; float myVariable; // "when Controller1 Axis3 changed" hat block void onevent_Controller1Axis3Changed_0() { Motor1.setVelocity(Controller1.Axis3.position(), percent); Motor2.setVelocity(Controller1.Axis3.position(), percent); Motor1.spin(forward); Motor2.spin(forward); } // "when Controller1 Axis2 changed" hat block void onevent_Controller1Axis2Changed_0() { Motor11.setVelocity(Controller1.Axis2.position(), percent); Motor12.setVelocity(Controller1.Axis2.position(), percent); Motor11.spin(forward); Motor12.spin(forward); } int main() { // Initializing Robot Configuration. DO NOT REMOVE! vexcodeInit(); // register event handlers Controller1.Axis3.changed(onevent_Controller1Axis3Changed_0); Controller1.Axis2.changed(onevent_Controller1Axis2Changed_0); wait(15, msec); // post event registration // set default print color to black printf("\033[30m"); // wait for rotation sensor to fully initialize wait(30, msec); } // ---- START VEXCODE CONFIGURED DEVICES ---- // Robot Configuration: // [Name] [Type] [Port(s)] // Controller1 controller // Motor1 motor 1 // Motor2 motor 2 // Motor11 motor 11 // Motor12 motor 12 // ---- END VEXCODE CONFIGURED DEVICES ----
内容的提问来源于stack exchange,提问作者axo1otl
相关产品推荐
相关产品推荐

