2016-04-05 124 views
1

我的代碼有問題。C + + - 錯誤:沒有匹配函數調用'Motor :: Motor()'

我有兩個錯誤:

拳錯誤:

MotorManager.cpp:7: error: no matching function for call to 'Motor::Motor()'

二錯誤:

MotorManager.cpp:10: error: use of deleted function 'Motor& Motor::operator=(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

'類Motor'不提供默認的構造函數,併爲您指定你自己的,編譯器不會生成一個給你。 –

回答

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; 
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) 
{ 
} 
相關問題