Я пишу программу для платформы Arduino с использованием platformio, и некоторые данные вложены в структуры вдоль этих линий, которые находятся в заголовочном файле класса (gauge.h)
#include "Arduino.h"
class gaugeClass{
public:
template<typename T, typename S>
void writeFlash( const T& dataParam, const S datVal);
void writeThreshold( int16_t datVal );
struct Flasht{
struct Settingst{
struct UnderVoltaget{
struct Thresholdt{
int16_t val = 2850;
uint16_t addr = 0x4481;
} threshold;
struct Delayt{
uint8_t val = 2;
uint16_t addr = 0x4483;
} delay;
} underVoltage;
} settings;
} ;
private:
};
In gauge. cpp, у меня есть функция шаблона для доступа к значениям.
#include "Arduino.h"
#include "gauge.h"
template<typename T, typename S>
void gaugeClass::writeFlash( const T& dataParam, const S datVal){
byte addrByte2 = dataParam.addr >> 8;
Serial.println( addrByte2, HEX );
Serial.println( datVal );
}
void gaugeClass::writeThreshold( int16_t datVal ){
Flasht flash;
writeFlash( flash.settings.underVoltage.threshold, datVal );
}
Тогда моя основная. cpp программа выглядит следующим образом
#include "Arduino.h"
#include <gauge.h>
gaugeClass myGauge;
void setup(){
Serial.begin(115200);
gaugeClass::Flasht flash;
myGauge.writeThreshold( flash.settings.underVoltage.threshold.val );
}
void loop(){
}
Но я хочу иметь возможность вызывать параметр шаблона напрямую из моей основной программы, например
myGauge.writeFlash( flash.settings.underVoltage.threshold, flash.settings.underVoltage.threshold.val );
Когда я добавляю это вместо функции writeThreshold
, компилятор выдает неопределенную ошибку ссылки. Как я могу вызвать функцию по-другому? Спасибо