2016-04-05 8 views
1

Ich habe ein Problem mit meinem Code.C++ - Fehler: keine passende Funktion für den Aufruf von 'Motor :: Motor()'

Ich habe zwei Fehler:

Faust Fehler:

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

Zweiter Fehler:

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

Dank

+0

'Klasse Hafter, keinen Standardkonstruktor bieten und wie Sie Ihre eigene angegeben haben, wird der Compiler einen nicht für Sie generieren. –

Antwort

1

Das primäre Problem ist, dass Sie das Mitglied Initialisiererliste im Konstruktor Definition verwenden müssen werden, denn sonst MotorManager wollen um sie mit dem Standardkonstruktor zu initialisieren.

Sie können es wie folgt beheben:

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&&)' 

Das ist ein Follow-up-Fehler, weil Sie Zuweisungsanweisungen verwendet

_motorLeftFront = Motor(MOTOR_FRONT_LEFT_FORWARD, MOTOR_FRONT_LEFT_BACKWARD); 

aber keine Bewegung Zuweisungsoperator erklären Überlastung wie:

Motor& Motor::operator=(Motor&&) = default; 

oder zumindest Kopie Zuordnung:

Motor& Motor::operator=(const Motor&) = default; 
2

Wenn eine Instanz von MotorManager aufgebaut ist, muss der Compiler alle seine Mitgliedsvariablen initialisieren auch. Da die Member in der Initialisierungsliste nicht initialisiert werden, wird versucht, den Standardkonstruktor für die Klasse aufzurufen. Da Motor keinen Standardkonstruktor hat, erhalten Sie den Fehler.

Dies wird durch Initialisierung der Membervariablen in der Initialisierungsliste festgelegt werden kann:

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) 
{ 
} 
Verwandte Themen