ошибка: использование 'this' в константном выражении в классе Arduino - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь написать класс для проекта Arduino, в качестве руководства я использую информацию из http://paulmurraycbr.github.io/ArduinoTheOOWay.html.

Я хочу настроить световую полосу для дальнейшего использования и постоянно получаю сообщение об ошибке: ошибка: использование 'this' в константном выражении.

Мой код выглядит так:

#include <FastLED.h>

#define LED_STRIP_PIN 2
#define LED_STRIP_NUM_LEDS 10

//const unsigned char LED_STRIP_PIN = 2;
//const int LED_STRIP_NUM_LEDS = 10;

CRGB leds[LED_STRIP_NUM_LEDS];

class LedStrip {
  unsigned char  pin;

  public:
    LedStrip(unsigned char attachTo) :
      pin(attachTo)
    {
    };

    void setup() {
      FastLED.addLeds<NEOPIXEL, pin>(leds, 10);
    };

};

//LedStrip ledstrip(LED_STRIP_PIN, LED_STRIP_NUM_LEDS);
LedStrip ledstrip(LED_STRIP_PIN);

void setup() {

}

void loop() {

}

Я попытался прочитать, что может вызвать это ошибка, но, честно говоря, я не понимаю ничего из этого. Насколько я понял, кажется, что я не могу использовать const там (которым я не являюсь, я думаю), поскольку он может быть изменен во время выполнения кода.

полная ошибка выглядит так: thissketch_feb03b.ino: В функции-члене 'void LedStrip :: setup ()':

sketch_feb03b:20:33: error: use of 'this' in a constant expression

       FastLED.addLeds<NEOPIXEL, pin>(leds, 10);

                                 ^~~

1 Ответ

1 голос
/ 03 февраля 2020

Ваша проблема в том, что pin не является константой времени компиляции, и все аргументы шаблона должны быть константами времени компиляции.

Могут быть и другие параметры, но (вероятно) самый простой из них проходит pin в качестве самого аргумента шаблона:

template<int pin> // make sure type of pin is correct, I don't know what addLeds expect
class LedStrip {
  public:
    LedStrip() //not really needed now
    {
    };

    void setup() {
      FastLED.addLeds<NEOPIXEL, pin>(leds, 10);
    };
};

Использование:

//if LED_STRIP_PIN is a compile-time constant, i.e. a macro or a const(expr) value
LedStrip<LED_STRIP_PIN> ledstrip;

//if LED_STRIP_PIN  is obtained at runtime, you cannot it use it at all.
LedStrip<7> ledstrip;
...