C++类内嵌套其他类对象调用方法报错(Arduino项目)
问题修复方案
错误根源
- 编译报错不需要把Motor对象定义为指针,核心问题是你在调用
Motor::init方法时,错误地给传入的参数添加了int类型声明。调用普通函数传递参数时,不需要重复声明参数的类型,只有在函数定义、函数声明阶段才需要标注参数类型。 - 另外你代码中Car类的所有成员函数实现都遗漏了返回值声明,也会导致后续编译报错。
修复步骤
1. 修复Car构造函数内的init调用
打开Car.cpp,将构造函数的代码修改为如下内容:
Car::Car(int forR, int revR, int forL, int revL) { // 传参去掉int类型前缀,直接传入变量即可 rMotor.init(forR, revR); lMotor.init(forL, revL); }
2. 补全所有Car成员函数的返回值
你当前的成员函数实现都漏了void返回值,和类声明里的定义保持一致即可,修改后的成员函数代码如下:
void Car::forward() { rMotor.forward(); lMotor.forward(); } void Car::reverse() { rMotor.back(); lMotor.back(); } void Car::turn(int angle) { float onTime = abs(angle) * degPerMs; if (angle < 0) { rMotor.forward(); lMotor.back(); delay(onTime); rMotor.brake(); lMotor.brake(); } else { lMotor.forward(); rMotor.back(); delay(onTime); rMotor.brake(); lMotor.brake(); } } void Car::brake() { lMotor.brake(); rMotor.brake(); }
内容的提问来源于stack exchange,提问作者Mitchell Day
相关产品推荐
相关产品推荐

