我的代码有问题。
我有两个错误:
拳头错误:
MotorManager.cpp:7:错误:没有匹配函数来调用' Motor :: Motor()'
第二个错误:
MotorManager.cpp:10:错误:使用已删除的功能' Motor&马达::运算=(马达&安培;&安培;)'
MotorManager.cpp
#include "MotorManager.h"
#include "Pins.h"
#include "Direction.h"
#include "Motor.h"
MotorManager::MotorManager() {
// Init motors
_motorLeftFront = Motor(MOTOR_FRONT_LEFT_FORWARD, MOTOR_FRONT_LEFT_BACKWARD);
_motorRightFront = Motor(MOTOR_FRONT_RIGHT_FORWARD, MOTOR_FRONT_RIGHT_BACKWARD);
_motorLeftBack = Motor(MOTOR_BACK_LEFT_FORWARD, MOTOR_BACK_LEFT_BACKWARD);
_motorRightBack = Motor(MOTOR_BACK_RIGHT_FORWARD, MOTOR_BACK_RIGHT_BACKWARD);
}
MotorManager.h
#include "Pins.h"
#include "Direction.h"
#include "Motor.h"
class MotorManager {
public:
// Constuctor
MotorManager();
};
Motor.cpp
#include "Motor.h"
#include "Direction.h"
Motor::Motor(const int pinForwad, const int pinBackward) : _pinForwad(pinForwad), _pinBackward(pinBackward) {
pinMode(pinForwad, OUTPUT);
pinMode(pinBackward, OUTPUT);
}
Motor.h
#include "Direction.h"
class Motor {
public:
// Constructor
Motor(const int pinForwad, const int pinBackward);
private:
//Variables
int _pinForwad;
int _pinBackward;
};
由于
答案 0 :(得分:2)
当构造MotorManager
的实例时,编译器也需要初始化其所有成员变量。由于成员未在初始化列表中初始化,因此它会尝试调用该类的默认构造函数。由于Motor
没有默认构造函数,因此您会收到错误。
这可以通过初始化初始化列表中的成员变量来修复:
MotorManager::MotorManager()
: _motorLeftFront(MOTOR_FRONT_LEFT_FORWARD, MOTOR_FRONT_LEFT_BACKWARD),
_motorRightFront(MOTOR_FRONT_RIGHT_FORWARD, MOTOR_FRONT_RIGHT_BACKWARD),
_motorLeftBackMOTOR_BACK_LEFT_FORWARD, MOTOR_BACK_LEFT_BACKWARD),
_motorRightBack(MOTOR_BACK_RIGHT_FORWARD, MOTOR_BACK_RIGHT_BACKWARD)
{
}
答案 1 :(得分:1)
主要问题是,您需要在构造函数定义中使用成员初始值设定项列表,否则MotorManager
希望使用默认构造函数初始化它们。
你可以这样解决:
MotorManager::MotorManager()
: _motorLeftFront(MOTOR_FRONT_LEFT_FORWARD, MOTOR_FRONT_LEFT_BACKWARD)
, _motorRightFront(MOTOR_FRONT_RIGHT_FORWARD, MOTOR_FRONT_RIGHT_BACKWARD)
, _motorLeftBack(MOTOR_BACK_LEFT_FORWARD, MOTOR_BACK_LEFT_BACKWARD)
, _motorRightBack(MOTOR_BACK_RIGHT_FORWARD, MOTOR_BACK_RIGHT_BACKWARD)
{}
MotorManager.cpp:10: error: use of deleted function 'Motor& Motor::operator=(Motor&&)'
这是一个跟进错误,因为您使用了赋值语句
_motorLeftFront = Motor(MOTOR_FRONT_LEFT_FORWARD, MOTOR_FRONT_LEFT_BACKWARD);
但没有声明移动赋值运算符重载,如:
Motor& Motor::operator=(Motor&&) = default;
或至少是复制作业:
Motor& Motor::operator=(const Motor&) = default;