好吧,所以我在one.h中有这个结构
typedef struct NWK_DataReq_t
{
uint16_t dstAddr;
uint8_t options;
uint8_t *data;
uint8_t size;
void (*confirm)(struct NWK_DataReq_t *req);
} NWK_DataReq_t;
稍后,在two.h中,有一些结构从NWK_DataReq_t
继承:
#include "one.h"
struct commandReq_t : public NWK_DataReq_t {
...
}
struct dataReq_t : public NWK_DataReq_t {
...
}
我的目标是在为NWK_DataReq_t
的某些变量设置默认值并向结构中添加变量时继承NWK_DataReq_t
的结构。到目前为止,为变量分配默认值可以按预期工作。我遇到麻烦的一点是分配(*确认)
功能
struct commandReq_t : public NWK_DataReq_t {
uint16_t dstAddress = 2;
uint8_t options = 8;
void confirm = commandReqConf;
char newVar[20] = "Hello";
} commandReq;
...
void commandReqConf(NWK_DataReq_t *req);
我不知道如何设置默认函数来覆盖它。我的目标是将commandReqConf
设置为(*confirm)
函数,并将其传递给NWK_DataReq_t
。
我希望这是有道理的,任何帮助都会很棒。
答案 0 :(得分:1)
恕我直言,正如您撰写struct commandReq_t : public NWK_DataReq_t {
并将问题标记为c++,您现在处于c ++世界。
恕我直言,初始化对象的最简单方法是在构造函数中:
struct commandReq_t : public NWK_DataReq_t {
commandReq_t() { // default ctor
dstAddr = 2;
options = 8;
strcpy(newVar, "Hello");
confirm = &commandReqConf;
}
char newVar[20]; // initialized at ctor initialization time
} commandReq;
...
static void commandReqConf(NWK_DataReq_t *req);
因为函数commandReqConf
实际上是类CzarController
的成员,它应该是静态的 - 但如果它与结构包含在同一个类中则不需要限定。
答案 1 :(得分:1)
行
uint16_t dstAddress = 2;
uint8_t options = 8;
void confirm = commandReqConf;
char newVar[20] = "Hello";
commandReq_t
的定义中的是struct
的成员。他们是其他成员。它们不会覆盖NWK_DataReq_t
中的成员。鉴于此,该行
void confirm = commandReqConf;
两个帐户错误。
void
类型的成员变量。void
返回confirm
。您需要做的是在构造函数中设置成员的值。
struct commandReq_t : public NWK_DataReq_t {
commandReq_t()
{
dstAddr = 2;
options = 8;
confirm = commandReqConf;
strcpy(newVar, "Hello");
}
char newVar[20];
} commandReq;