Можете ли вы объявить постоянный объект в функции?

Один семестр Comp Sci под моим поясом, здесь ничего не выходит.

Мне нужно вызвать константу int, чтобы использовать количество светодиодов в полосе для FastLED. Короче говоря, я пытаюсь заменить …

    #include "FastLED.h"#define NUM_LEDS_RT 174
#define DATA_PIN_RT 6
#define CLOCK_PIN_RT 5
...
CRGB led[NUM_LEDS_RT + NUM_LEDS_MID + NUM_LEDS_LF + NUM_LEDS_FIRE];
FastLED.addLeds<WS2801, DATA_PIN_RT, CLOCK_PIN_RT, BGR> (led, NUM_LEDS_RT);

С моей собственной библиотекой, которую я сделал, создавая структуру для светодиодной ленты, содержащую вышеупомянутую информацию, засеянную файлом драйвера для программы. Все должно быть в рабочем состоянии, но я не могу обойти эту первую ошибку. Например, объект, содержащий мои данные, создается …

    Strip::Strip(int data, int clock, int num)
{
#define DATA_Pin data
#define CLOCK_Pin clock
#define NUM_LEDS num
}

и посеян водителем как …

    Strip RIGHT(6, 5, 174);

Проще говоря, есть ли способ вызвать объект, чтобы иметь постоянные значения? Возникающая ошибка говорит о том, что RIGHT.name не является константной переменной и получает «Led.cpp: 39: error: неправильное количество аргументов шаблона (4, должно быть 3)» или какой-то другой вариант.

Пожалуйста помоги! Дайте мне знать, если вам нужна дополнительная информация. Спасибо!

РЕДАКТИРОВАТЬ: Добавлено больше кода для справки:
Стрип класс

    #ifndef Strip_h
#define Strip_h
#include "Arduino.h"#include <String>
#include "C:/Program Files (x86)/Arduino/libraries/FastLED/FastLED.h"
class Strip
{
public:
Strip(int data, int clock, int num);

private:
int DATA_Pin;
int CLOCK_Pin;
int NUM_LEDS;
};

#endif

#include "Strip.h"

Strip::Strip(int data, int clock, int num)
{
DATA_Pin = data;
CLOCK_Pin = clock;
NUM_LEDS = num;
}

Led Class

    #ifndef Led_h
#define Led_h
include "C:/Program Files (x86)/Arduino/libraries/FastLED/FastLED.h"#include "Strip.h"
class Led
{
public:
Led(const Strip& name);
Led(const Strip& name, const Strip& name2);
Led(const Strip& name, const Strip& name2, const Strip& name3);
Led(const Strip& name, const Strip& name2, const Strip& name3, const Strip& name4);

private:

};

#endif

Led::Led(const Strip& const Strip&, const Strip& name2, const Strip& name3, const Strip& name4)
{
CRGB led[name.NUM_LEDS + name2.NUM_LEDS + name3.NUM_LEDS + name4.NUM_LEDS];

FastLED.addLeds<WS2801, name.DATA_Pin, name.CLOCK_Pin, BGR>(led, name.NUM_LEDS);
FastLED.addLeds<WS2801, name2.DATA_Pin, name2.CLOCK_Pin, BGR>(led, name.NUM_LEDS, name.NUM_LEDS + name2.NUM_LEDS);
FastLED.addLeds<WS2801, name3.DATA_Pin, name3.CLOCK_Pin, BGR>(led, name.NUM_LEDS + name2.NUM_LEDS, name.NUM_LEDS + name2.NUM_LEDS + name3.NUM_LEDS);
FastLED.addLeds<WS2801, name4.DATA_Pin, name4.CLOCK_Pin, BGR>(led, name.NUM_LEDS + name2.NUM_LEDS + name3.NUM_LEDS, name.NUM_LEDS + name2.NUM_LEDS + name3.NUM_LEDS + name4.NUM_LEDS);
}

Водитель

    #include "Led.h"#include "MusicChip.h"#include "Shapes.h"#include "Strip.h"
const Strip RIGHT(6, 5, 174);
const Strip MID(4, 3, 200);
const Strip LEFT(22, 23, 177);
const Strip FIRE(10, 12, 97);

void setup()
{
delay(1000); // Sanity Check, allows input to settle
Serial.begin(9600);
Led running(RIGHT, MID, LEFT, FIRE);

MusicChip MAIN(0, 8, 7);
}

1

Решение

Правильный синтаксис для создания объекта const такой, какой он у вас есть:

const Strip RIGHT(6, 5, 174);

Обратите внимание, что вам не нужно фактически иметь объект const для вызова функции, которая принимает ссылку на const. Вы можете просто передавать неконстантные объекты, и они рассматриваются как const для целей этого вызова функции.

Юу упомянуть кое-что о проблемах с шаблоном. Трудно сказать, так как вы не публиковали сообщения об ошибках вместе с тем, где они произошли, но этот код здесь безнадежно нарушен:

FastLED.addLeds<WS2801, name.DATA_Pin, name.CLOCK_Pin, BGR>(led, name.NUM_LEDS);

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

0

Другие решения


По вопросам рекламы [email protected]