C ++嵌入式系统摩尔斯电码

时间:2015-02-01 23:29:06

标签: c++ arrays c++11

我理解我的代码错误。我正在尝试在类中初始化一个数组,这是不允许的,因为

  

通过将其包装到类中,您不再使用假定的常量   引用初始化时给定的具有固定值的对象的名称   常数。相反,您现在声明了常量数据成员,   它们类似于非常量数据成员,并且存在于每个实例中   在那个班上靠自己。您提供的价值不过是   初始化常量成员的默认值   构造函数。   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 },
    ...
};

1 个答案:

答案 0 :(得分:0)

数组是类大小的一部分,意味着sizeof(Code)应该等于:

sizeof(letterMakeUp)等于sizeof(short) * countof(letterMakeUp)

但是一个班级必须有固定的大小。

表示每个sizeof(Code)对象的Code必须相同。

如果不是这样,你就无法创建数组,向量等。

因此最好的解决方案是使用vector,您也可以动态声明数组。

另一个选择是对所有数组使用一些MAX_ARRAY作为常量,并保留实际的数组计数。