Не удается создать класс-оболочку для Encoder.h, конструктор Encoder был вызван до вызова конструктора класса-оболочки

это мой MotorEncoder.h

#include <Encoder.h>

class MotorEncoder {
public:
    MotorEncoder(int pin1, int pin2);
    void init();
    int read();

private:
    int pin1;
    int pin2;
    Encoder encoder;
};

А это MotorEncoder.cpp

#include "MotorEncoder.h"

MotorEncoder::MotorEncoder(int pin1, int pin2) {
    this->pin1 = pin1;
    this->pin2 = pin2;
    this->encoder = Encoder(pin1, pin2);
}

void MotorEncoder::init() {
}

int MotorEncoder::read() {
}

Я всегда получаю сообщение об ошибке, что я вызываю Encoder с 0 параметрами.

In file included from src/encoder/MotorEncoder.h:5:0,
                 from src/encoder/MotorEncoder.cpp:1:
/Users/slawalata/.platformio/lib/Encoder_ID129/Encoder.h:72:2: note: candidate: Encoder::Encoder(uint8_t, uint8_t)
  Encoder(uint8_t pin1, uint8_t pin2) {
  ^
/Users/slawalata/.platformio/lib/Encoder_ID129/Encoder.h:72:2: note:   candidate expects 2 arguments, 0 provided

Он ломается во время компиляции. Я вообще не вызывал этот конструктор.

Спасибо заранее.


person slawalata    schedule 10.06.2020    source источник


Ответы (1)


Основываясь на этой ссылке, я измените мой код на:

MotorEncoder.h

class MotorEncoder {

    public:
    MotorEncoder(int pin1, int pin2);

    void init();

    int read();

    private:
        int pin1;
        int pin2;
        Encoder* encoder;
};

MotorEncoder.cpp

MotorEncoder::MotorEncoder(int pin1, int pin2) {
    this->pin1 = pin1;
    this->pin2 = pin2;
    this->encoder = new ::Encoder(pin1, pin2);
}

void MotorEncoder::init() {
}

int MotorEncoder::read() {
    return encoder->read();
}

Большое спасибо,

person slawalata    schedule 10.06.2020