VexCode V5编写VEX机器人C++程序函数定义位置报错求助
VEX V5 C++编译报错
function definition is not allowed here (64,3) 解决方案 报错根因
- 代码首尾多了一对无意义的大括号,把
int main()函数定义包裹在了一个匿名代码块内部。C++语法禁止在代码块、其他函数内部嵌套定义函数,编译器检测到main函数定义出现在非法位置,就会在main后方的大括号位置抛出该错误。 - 你当前代码混用了旧版ROBOTC的编程接口,和VexCode V5的原生C++接口不兼容,就算修好括号问题,后续也会报大量标识符未定义的错误。
- 代码开头的四个
Motor1.spin(forward);语句写在了全局作用域,全局作用域只能写声明、初始化语句,不能直接写执行逻辑。
修复方法
- 删除代码最开头(
Motor1.spin(forward);之前)的多余左大括号,以及代码最末尾和它配对的多余右大括号。 - 删掉裸露在全局作用域的四个无参数
Motor.spin()调用,电机控制逻辑要放在函数内部执行。 - 将旧ROBOTC接口替换为VexCode V5原生C++接口:
- 遥控器摇杆/按键读取通过
Controller类的方法实现 - 电机转速通过
motor.spin()方法传入速度参数控制 - 延时函数使用
wait(时长, 时间单位)格式
- 主循环里增加短延时,避免主控CPU占用过高触发看门狗复位。
修复后可直接编译的麦克纳姆轮基础控制代码
#include "vex.h" using namespace vex; // 电机、控制器对象声明,若你已经在VexCode的设备配置页绑定过对应电机,可删除这部分重复声明 motor Front_Left(PORT1, ratio18_1, false); motor Front_Right(PORT2, ratio18_1, true); motor Back_Right(PORT3, ratio18_1, true); motor Back_Left(PORT4, ratio18_1, false); controller Controller1(primary); int main () { while(true) { // 读取遥控器摇杆值,输出范围-100~100,对应0~100%转速 int axisX = Controller1.Axis1.value(); int axisY = Controller1.Axis2.value(); // 麦克纳姆轮全向运动基础速度解算 int flSpd = axisY + axisX; int frSpd = axisY - axisX; int brSpd = axisY + axisX; int blSpd = axisY - axisX; // 左上方按键按下:逆时针自转 if (Controller1.ButtonL1.pressing()) { flSpd = -100; frSpd = 100; brSpd = 100; blSpd = -100; wait(50, msec); flSpd = frSpd = brSpd = blSpd = 0; } // 右上方按键按下:顺时针自转 if (Controller1.ButtonR1.pressing()) { flSpd = 100; frSpd = -100; brSpd = -100; blSpd = 100; wait(50, msec); flSpd = frSpd = brSpd = blSpd = 0; } // 向所有电机下发速度指令 Front_Left.spin(forward, flSpd, percent); Front_Right.spin(forward, frSpd, percent); Back_Right.spin(forward, brSpd, percent); Back_Left.spin(forward, blSpd, percent); wait(20, msec); } }
提示:代码里的电机端口号、正反转参数需要和你实际的硬件接线匹配,否则会出现运动方向错乱、原地打转的问题,可单独调整每个电机构造函数的最后一个布尔值(false/true)切换转向。
内容的提问来源于stack exchange,提问作者Max Gomez
相关产品推荐
相关产品推荐

