无法为 Encoder.h 构建包装类,在调用包装类构造函数之前调用了编码器构造函数

Posted

技术标签:

【中文标题】无法为 Encoder.h 构建包装类,在调用包装类构造函数之前调用了编码器构造函数【英文标题】:Cant build a wrapper class for Encoder.h, Encoder constructor has been called before wrapper class constructor is called 【发布时间】:2020-06-10 05:21:10 【问题描述】:

这是我的 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() 

我总是收到一条错误消息,指出我使用 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

编译时间中断。我根本没有调用这个构造函数。

非常感谢。

【问题讨论】:

【参考方案1】:

基于此link,我将代码更改为:

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();

非常感谢,

【讨论】:

以上是关于无法为 Encoder.h 构建包装类,在调用包装类构造函数之前调用了编码器构造函数的主要内容,如果未能解决你的问题,请参考以下文章

为包装类操作 PHP-instanceof-operator

使用 SWIG 包装调用另一个对象成员函数的 C++ 类

integer类的parseint方法(基本数据类型包装类 )

包装类

基本数据类型包装类

在 angular2 中构建一个包装器指令(包装一些内容/组件)