使用Arduino IDE的构造函数的未定义参考错误
Undefined Reference error for Constructor using Arduino IDE
我正在研究一个学生项目,以使用Arduinos(包括Arduino IDE(来创建一对机器人,该机器人通过上下攀登。该项目的一部分包括一个简单的ML AI,该ML AI将自动调整机器人的速度,以确保以正确的速度达到顶部。我已经制作了一个库来提供必要的变量和功能来执行此任务。
在此库的较早版本中(编译得很好(,只有一个构造函数使用数组来存储数据,因此数组长度始终是特定的长度。在下一个版本中,正在制作另一个构造函数以允许在构造时指定的数组长度,因为Arduino IDE不允许使用矢量库。但是,当尝试使用设置和循环功能编译源代码时,使用的构造函数不确定的参考错误。忽略无关的代码,我的代码库看起来像
主程序
#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);
speedcorter.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
错误,因此它肯定会检测到库。
错误抱怨主要程序中的速度校正师的构建,说明
undefined reference to `SpeedCorrector::SpeedCorrector(unsigned int, unsigned long)'
我得到了如何从https://www.arduino.cc/en/hacking/librarytoriorail
根据Arduino IDE中的文件/首选项,默认的素描本位置为/home/user_name/Arduino
。
因此,SpeedCorrector.h
和SpeedCorrector.cpp
文件应放在/home/user_name/Arduino/libraries/SpeedCorrector
中,而不是位于主(.ino
(程序的子目录中。
如Juraj在评论中所述,主程序(.ino
(应使用#include <SpeedCorrector.h>
,而不会通往标头文件的任何完整路径。
- C++错误消息*成员参考.**初学者*
- 为什么编译器不给出模棱两可的参考错误
- 使用Arduino IDE的构造函数的未定义参考错误
- 未定义的参考错误链接天然函数Android
- __extern_inline func导致未定义的参考错误
- 大量未定义的参考错误
- 在C++中使用 CImg 的未定义参考错误
- 为什么此C 代码不起作用 - 试图删除集合中的元素时,请参考错误
- 将未定义的参考错误限制为仅直接依赖性
- GL3W和GLFW未定义的参考错误
- 基本节日节目具有未定义的参考错误
- 链接到第三方共享库时的G 未定义的参考错误
- 尝试构建C DLIB示例无法与数百个未定义的参考错误链接
- C 地图向量参考错误
- 编译QT Hello World程序时未定义的参考错误
- 在 *.cpp中定义函数而不是在 *.h中定义函数时,未定义的参考错误
- x86 上的 Android NDK 和 STL 相关参考错误
- 参考错误时,使用c++和qml的诺基亚N9
- QT未定义参考错误(Qextserialport)
- Boehm GC 附带"cord"库会导致未定义的参考错误