C ++ - 错误:没有匹配函数来调用' Motor :: Motor()'

时间:2016-04-05 18:40:35

标签: c++

我的代码有问题。

我有两个错误:

拳头错误:

  

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;
};

由于

2 个答案:

答案 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;