如何解决指向函数指针的空指针作为参数传递
我在下面有一个接受以下参数的函数
struct coap_s *sn_coap_protocol_init(void *(*used_malloc_func_ptr)(uint16_t),void (*used_free_func_ptr)(void *),uint8_t (*used_tx_callback_ptr)(uint8_t *,uint16_t,sn_nsdl_addr_s *,void *),int8_t (*used_rx_callback_ptr)(sn_coap_hdr_s *,void *param))
所以我试图分别将以下四个函数作为参数传递
void* CoApClient::coap_malloc(uint16_t size)
{
return malloc(size);
}
void CoApClient::coap_free(void* addr)
{
free(addr);
}
uint8_t CoApClient::coap_tx_cb(uint8_t *data,uint16_t len,sn_nsdl_addr_s *addr,void *param)
{
uint16_t id = data[3] | (data[2] << 8);
if (_txCallback)
{
_txCallback(data,len,100);
}
return 0;
}
int8_t CoApClient::coap_rx_cb(sn_coap_hdr_s *packet,void *param)
{
printf("Failed to send message with ID %d. Error: %d\n",packet->msg_id,packet->coap_status);
CoApClient::failedMsgs++;
uint16_t packet_len = sn_coap_builder_calc_needed_packet_data_size(packet);
uint8_t* packet_ptr = (uint8_t*)malloc(packet_len);
//Build message address information
sn_nsdl_addr_s dst_addr_ptr;
dst_addr_ptr.type = SN_NSDL_ADDRESS_TYPE_IPV4;
dst_addr_ptr.addr_ptr = (uint8_t*)addr->addr_ptr;
dst_addr_ptr.addr_len = addr->addr_len;
dst_addr_ptr.port = addr->port;
//keep retrying the failed message
// if( sn_coap_protocol_build(coapHandle,&dst_addr_ptr,packet_ptr,packet,0) > 0)
// {
// if (_txCallback)
// {
// _txCallback(packet_ptr,packet_len,100);
// }
// }
return 0;
}
但我收到此错误.. CoApClient.cpp@34,41:ISO C++ 禁止将未限定或带括号的非静态成员函数的地址作为指向成员函数的指针。说 '&CoApClient::coap_malloc' [-fpermissive] [错误] CoApClient.cpp@34,55:ISO C++ 禁止将未限定或带括号的非静态成员函数的地址作为指向成员函数的指针。说 '&CoApClient::coap_free' [-fpermissive] [错误] CoApClient.cpp@34,67:ISO C++ 禁止将未限定或带括号的非静态成员函数的地址作为指向成员函数的指针。说 '&CoApClient::coap_tx_cb' [-fpermissive] [错误] CoApClient.cpp@34,80:ISO C++ 禁止将未限定或带括号的非静态成员函数的地址作为指向成员函数的指针。说 '&CoApClient::coap_rx_cb' [-fpermissive] [错误] CoApClient.cpp@34,40:无法转换'void* (CoApClient::)(uint16_t)' {aka 'void (CoApClient::)(short unsigned int)' } 到 'void ()(uint16_t)' {aka 'void (*)(short unsigned int)'}
那是在我在 CoAPClient 类的构造函数中执行此操作之后
CoApClient::CoApClient()
{
// Initialize the CoAP protocol handle,pointing to local implementations on malloc/free/tx/rx functions
coapHandle = sn_coap_protocol_init(&coap_malloc,&coap_free,&coap_tx_cb,&coap_rx_cb);
}
我不太确定为什么会出现这种情况,我很感激我在这里出错的地方
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。