我理解我的代码错误。我正在尝试在类中初始化一个数组,这是不允许的,因为
通过将其包装到类中,您不再使用假定的常量 引用初始化时给定的具有固定值的对象的名称 常数。相反,您现在声明了常量数据成员, 它们类似于非常量数据成员,并且存在于每个实例中 在那个班上靠自己。您提供的价值不过是 初始化常量成员的默认值 构造函数。 error: too many initializers for const
摩尔斯电码字符长度最多为六个字符,单位为DOTS或DASHES。因此,我有一个阵列,我想要举行六个点。问题是,我使用的是Arduino Uno,所以内存是一个问题。如何编写我的代码,以便能够以最低的内存使用率执行此操作,或者仅仅是我正在尝试完成的工作示例,而无需借助STL。 code.h
#include "Arduino.h"
const short DOT = 1000 / 2;
const short DASH = 3000 / 2;
class Code
{
public:
Code();
Code(short short1);
Code(short short1, short short2);
Code(short short1, short short2, short short3);
Code(short short1, short short2, short short3, short short4);
Code(short short1, short short2, short short3, short short4, short short5);
Code(short short1, short short2, short short3, short short4, short short5, short short6);
~Code();
private:
short letterMakeUp[];
};
code.cpp
#include "Arduino.h"
#include "code.h"
Code::Code()
{
}
Code::Code(short short1) : letterMakeUp{ short1 }
{
};
Code::Code(short short1, short short2) : letterMakeUp{short1, short2}
{
}
Code::Code(short short1, short short2, short short3) : letterMakeUp{short1, short2, short3}
{
}
Code::Code(short short1, short short2, short short3, short short4) : letterMakeUp{ short1, short2, short3, short4 }
{
}
Code::Code(short short1, short short2, short short3, short short4, short short5) : letterMakeUp{ short1, short2, short3, short4, short5 }
{
}
Code::Code(short short1, short short2, short short3, short short4, short short5, short short6) : letterMakeUp{ short1, short2, short3, short4, short5, short6 }
{
}
characters.h
Code Letters[26] =
{
{ DOT, DASH },
{ DASH, DOT, DOT, DOT },
{ DASH, DOT, DASH, DOT },
{ DASH, DOT, DOT },
{ DOT },
...
};
答案 0 :(得分:0)
数组是类大小的一部分,意味着sizeof(Code)应该等于:
sizeof(letterMakeUp)
等于sizeof(short) * countof(letterMakeUp)
但是一个班级必须有固定的大小。
表示每个sizeof(Code)
对象的Code
必须相同。
如果不是这样,你就无法创建数组,向量等。
因此最好的解决方案是使用vector
,您也可以动态声明数组。
另一个选择是对所有数组使用一些MAX_ARRAY
作为常量,并保留实际的数组计数。