你能在函数中声明一个常量对象吗?
Can you declare a constant object in a function?
我学了一个学期的计算机科学,却一无所获。
我需要调用一个常量int来用于FastLED的条带中led的数量。长话短说,我正试图取代…
#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);
使用我自己的库,我为LED条创建了一个结构体,包含上述信息,由程序的驱动程序文件播种。一切都应该是正常的,但是我无法克服第一个错误。例如,包含我的数据的对象是由…
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;
}
领导类
#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);
}
创建const对象的正确语法如下:
const Strip RIGHT(6, 5, 174);
注意,要调用接受const引用的函数,并不需要实际拥有const对象。你可以只传递非const对象,它们在函数调用时被视为const对象。
你提到一些关于模板的问题。这很难说,因为您没有将错误消息连同它们发生的位置一起发布,但是这里的代码已经无可救药地损坏了:
FastLED.addLeds<WS2801, name.DATA_Pin, name.CLOCK_Pin, BGR>(led, name.NUM_LEDS);
和它后面的其他行。模板参数必须在编译时解析。不能像前面那样在模板参数列表中放置变量
相关文章:
- 用C++中的一个变量定义一个常量
- 从另一个常量标准::映射初始化一个常量标准::映射的一部分
- isdigit() 和 isalnum() 给出错误,因为输入是一个常量字符并且无法转换。其他可能查看输入是否为数字的方法?
- C++ 在 none 常量指针函数中返回一个常量指针
- 为什么重载"<<"需要一个常量参数?
- 为什么它是一个常量指针而不是指向常量指针
- 是一个常量句柄真的常量
- 将一个常量cstring附加到我自己的String类对象
- C++在类构造函数中定义了一个常量成员变量
- G++抱怨constexpr函数不是一个常量表达式
- 是一个常量字符串Still Preferrable
- 返回一个常量字符 *
- 将一个常量未签名的长流流式传输到流
- 从自定义 printf 函数返回一个常量字符*
- C++做虚函数总是必须是一个常量
- 我想将一个常量字符串写入包含另一个输入数据块的文件
- 如何计算初始化一个常量数组(制作常量查找表)
- C++:在初始化列表中传递一个常量 *p
- 我可以在 protobuf 中定义一个常量字符串吗?
- 初始化一个常量变量,如果失败则断言(c++)