如何使我的char数组保持不变?

Mar*_*eIV 5 c c++ const arduino

这里有C/C++ noob.我在头文件中定义了这个...

typedef unsigned char BitChar[9]; // 8 data bytes (chars) and one width byte (char)

extern BitChar BitFont[];
Run Code Online (Sandbox Code Playgroud)

我在cpp文件中有这个...

BitChar BitFont[] = {
    B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,2, // 32 - Space
    B10000000,B10000000,B10000000,B10000000,B10000000,B00000000,B10000000,B00000000,1, // 33 - !
    ...
    B00000000,B00000000,B11100000,B11100000,B11100000,B00000000,B00000000,B00000000,3, // 127 - Unknown
};
Run Code Online (Sandbox Code Playgroud)

它编译并且看起来运行得很好.但是,因为它永远不会改变,我认为它应该被标记为常数.我该如何标记?我所期待的,添加'const',抛出编译错误,所以我很难过.这是错误......

error: invalid initialization of reference of type 'unsigned char (&)[9]' from expression of type 'const unsigned char [9]' 
Run Code Online (Sandbox Code Playgroud)

AnT*_*AnT 9

只需添加const.这个

extern const BitChar BitFont[];
...
const BitChar BitFont[] = {
    B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,2, // 32 - Space
    B10000000,B10000000,B10000000,B10000000,B10000000,B00000000,B10000000,B00000000,1, // 33 - !
    ...
    B00000000,B00000000,B11100000,B11100000,B11100000,B00000000,B00000000,B00000000,3, // 127 - Unknown
};
Run Code Online (Sandbox Code Playgroud)

应该在C中完美地工作.(假设您的编译器知道这些B00000000标识符的含义.)

这在C++中也可以很好地工作.C++版本中唯一的错误可能是基于C++特有的属性const.如果定义没有看到声明,那么您还必须extern在定义中指定explicit

extern const BitChar BitFont[] = {
    B00000000
    ...
Run Code Online (Sandbox Code Playgroud)

因为在C++中,const对象默认具有内部链接.但是,如果声明已经包含extern并且定义可以看到声明,那么定义中的声明extern是可选的.

您引用的错误消息表明您在代码中的某个位置尝试使用const限定数组初始化类型BitChar &(aka unsigned char (&)[9])的引用BitChar.这不起作用,因为它违反了const-correctness的基本规则.引用也必须成为const限定条件,即它必须更改为const BitChar &(aka const unsigned char (&)[9]).

  • @MarqueIV:同样,你的问题根本没有提到任何参考.把它放在你的问题中,我会把它放在我的答案中. (3认同)