Шаблонная функция C ++ извне класса - PullRequest
0 голосов
/ 09 января 2020

Я пишу программу для платформы 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, компилятор выдает неопределенную ошибку ссылки. Как я могу вызвать функцию по-другому? Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...