这里是 C/C++ 菜鸟。我已经在头文件中定义了它...
typedef unsigned char BitChar[9]; // 8 data bytes (chars) and one width byte (char)
extern BitChar BitFont[];
我把它放在一个 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
};
它编译并且看起来运行得很好。然而,由于它永远不会改变,我认为它应该被标记为常量。我该如何标记它?我所期望的是,添加“const”会引发编译错误,所以我很困惑。这是错误...
error: invalid initialization of reference of type 'unsigned char (&)[9]' from expression of type 'const unsigned char [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
};
在 C 中应该可以很好地工作。(假设您的编译器知道这些 B00000000
标识符的含义。)
这在 C++ 中也能完美运行。 C++ 版本中唯一可能的错误是基于 const
的 C++ 特定属性。如果定义没有看到声明,那么你必须在定义中指定显式 extern
extern const BitChar BitFont[] = {
B00000000
...
因为在 C++ 中,const
对象默认具有内部 链接。但是,如果声明中已经包含extern
并且定义可以看到声明,那么定义中的那个extern
是可选的。
您引用的错误消息表明您在代码中的某处尝试初始化类型为 BitChar &
的引用(又名 unsigned char (&)[9]
)带有 const 限定的 BitChar
数组。这是行不通的,因为它违反了 const-correctness 的基本规则。引用也必须成为 const 限定的,即它必须更改为 const BitChar &
(又名 const unsigned char (&)[9]
)。
关于c++ - 如何将 char 数组定义为常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25320790/