繁体   English   中英

使用 Arduino IDE 的构造函数的未定义参考错误

[英]Undefined Reference error for Constructor using Arduino IDE

我正在开展一个学生项目,以创建一对机器人,使用 Arduinos(包括 Arduino IDE)通过上下爬升来报时。 该项目的一部分包括一个简单的 ML AI,它将自动调整机器人的速度,以确保它以正确的速度到达顶部。 我制作了一个库来提供执行此任务所需的变量和函数。

在这个库的早期版本(编译得很好)中,只有一个构造函数使用数组来存储数据,这样数组长度总是一个特定的长度。 在下一个版本中,正在制作另一个构造函数以允许在构造时指定数组长度,因为 Arduino IDE 不允许使用向量库。 但是,当尝试使用 setup 和 loop 函数编译源代码时,对正在使用的构造函数的未定义引用错误。 忽略不相关的代码,我的代码库看起来像

主程序

#include "libraries/SpeedCorrector/SpeedCorrector.h"

const uint8_t MAX_HOURS = 12; //12 hour clock
const uint32_t CORRECT_TIME = MAX_HOURS*60*60*1000; //Num of milliseconds in 12 hours
const uint16_t INITIAL_PWM = 300; //dummy initial PWM value for testing

uint32_t climbTime;
uint16_t currentPwm;
uint16_t tempPwm;
bool photoInterruptMet = false;

SpeedCorrector speedCorrector(INITIAL_PWM, CORRECT_TIME);

速度修正器.h

#ifndef SpeedCorrector_h
#define SpeedCorrector_h

#include "Arduino.h"

class SpeedCorrector {
    public:
        const static uint8_t MAX_NUM_OF_PWM = 10; //default value
        const static uint16_t MOTOR_SLIP_CORRECTION = 10; //default value

        SpeedCorrector(uint16_t initialPwm, uint32_t inCorrectTime);
        SpeedCorrector(uint16_t initialPwm, uint32_t inCorrectTime, uint8_t inMaxNumOfPwm, uint8_t inMotorSlipCorrection);
    private:
        uint8_t pwmIndex;
        uint8_t maxNumOfPwms;
        bool correctedPwmsFull;
        uint32_t correctTime;
        uint8_t motorSlipCorrection;
};

#endif

SpeedCorrector.cpp

#include "Arduino.h"
#include "SpeedCorrector.h"

SpeedCorrector::SpeedCorrector(uint16_t initialPwm, uint32_t inCorrectTime) {
    pwmIndex = 0;
    maxNumOfPwms = MAX_NUM_OF_PWMS;
    uint16_t correctedPwms[maxNumOfPwms];
    correctedPwmsFull = false;
    correctedPwms[0] = initialPwm;
    correctTime = inCorrectTime;
    motorSlipCorrection = MOTOR_SLIP_CORRECTION;
}

SpeedCorrector::SpeedCorrector(uint16_t initialPwm, uint32_t inCorrectTime, 
                          uint8_t inMaxNumOfPwms, uint8_t inMotorSlipCorrection) {
  pwmIndex = 0;
  maxNumOfPwms = inMaxNumOfPwms
  uint16_t correctedPwms[maxNumOfPwms];
  correctedPwmsFull = false;
  correctedPwms[0] = initialPwm;
  correctTime = inCorrectTime;
  motorSlipCorrection = inMotorSlipCorrection;
}

不幸的是,我不得不在构造函数中声明数组以允许在构造时指定长度。

我试图注释掉数组以查看是否收到不同的错误消息,但无济于事。 我还将库移动到不同的目录中,但no such file or directory错误,因此它肯定会检测到库。

该错误抱怨主程序中 SpeedCorrector 的构建,指出

undefined reference to `SpeedCorrector::SpeedCorrector(unsigned int, unsigned long)'

我从https://www.arduino.cc/en/Hacking/LibraryTutorial得到了关于如何制作图书馆的说明

根据 arduino IDE 中的 File/Preferences,默认 SketchBook 位置是/home/user_name/Arduino

所以SpeedCorrector.hSpeedCorrector.cpp文件应该放在/home/user_name/Arduino/libraries/SpeedCorrector ,而不是放在主( .ino )程序所在的子目录中。

正如 Juraj 在评论中所述,主程序 ( .ino ) 应该使用#include <SpeedCorrector.h> ,而没有任何头文件的完整路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM