gpt4 book ai didi

C++ 结构引用类型

转载 作者:行者123 更新时间:2023-11-30 03:05:49 25 4
gpt4 key购买 nike

我有一个名为 IAckHandler 的类

class IAckHandler {
public:
virtual ~IAckHandler();

virtual void handleAck(long messageType, bool ackrcvd, uint8_t ackByte) = 0;
private:

};

预期用途是供其他类继承,因此这基本上是一个“接口(interface)”类。

我正在使用消息队列向轮询线程(uart comm)提交请求,并希望将 IAckHandler 传递到消息队列消息中。结构是这样的:

struct reqmsg
{
long int mtype;
void (*reqHandler)(MasterRadioComm*, uint8_t*);
IAckHandler* ackHandler;
unsigned char mtext[NUM_INDICES];
};

这里是提交消息队列的函数

void Uartcom::req_doSomething(IAckHandler& ackHandler)
{
struct reqmsg req;
if(ackHandler == NULL) req.ackHandler = this;
else req.ackHandler = ackHandler;
msgsnd(m_msgQueueKey, &req, sizeof(struct reqmsg) - sizeof(long), 0);
}

但是当我传入对 IAckHandler 的引用时,我得到 cannot convert ‘IAckHandler’ to ‘IAckHandler*’ in assignment.

我可以从另一个继承 IAckHandler 的类调用 req_doSomething(this) 吗?

最佳答案

您似乎缺少一些基本的指针和引用知识。对于示例中给出的 req_doSomething&ref 将为您提供指向所引用对象的指针,因此它应该是

else req.ackHandler = &ackHandler;

要从指针获取引用,您可以使用 *ptr 取消引用它,因此调用将是

req_doSomething(*this);

...或者只是放弃引用并完全使用指针。

更新:正如其他人所指出的,引用不能为 NULL。

关于C++ 结构引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7436462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com