【发布时间】:2018-02-26 16:08:22
【问题描述】:
我是 C++ 的新手,我遇到了一个问题,我需要在我的类中通过 typedef 定义一个新的数据类型(具体来说是联合)。我班级的.h模块的相关代码sn-p如下
class Manager
{
public:
static const uint8_t NO_BYTES_IN_PACKET;
static const uint8_t NO_PYLD_BYTES_IN_CONTROL_PACKET;
// control packet structure
typedef union{
struct{
uint8_t header[3];
uint8_t payload[NO_PYLD_BYTES_IN_CONTROL_PACKET];
}pkt_parts_t;
uint8_t pkt_array[NO_BYTES_IN_PACKET];
}control_pkt_u;
private:
}
我的问题是常量
static const uint8_t NO_BYTES_IN_PACKET;
static const uint8_t NO_PYLD_BYTES_IN_CONTROL_PACKET;
在相关的 .cpp 模块中定义
const uint8_t Manager::NO_BYTES_IN_PACKET = 8;
const uint8_t Manager::NO_PYLD_BYTES_IN_CONTROL_PACKET = 5;
因此,我在编译过程中收到一条错误消息:错误:数组绑定在 ']' 标记之前不是整数常量。我的想法是将联合定义移动到 .cpp 模块中,但我不确定这是否是正确的方法。你有什么意见?谢谢你的任何想法。
【问题讨论】:
-
aside:
typedef union是一个非常 C 的事情...... -
在 C 语言中,
const uint8_t foo = 5;不适合作为数组声明的常量。 (例如#define NO_BYTES_IN_PACKET 8) -
数组大小需要在编译时知道。您需要使用
#define设置数组大小或将数字文字写入大括号。常量值的运行时评估不起作用。
标签: c++ header-files typedef unions