我有两个结构体pbuf
和netif
,并为它们分配了两个变量(local_pbuf
,local_netif
) 。这些变量保存一些数据。还有另一个名为 wrapper_p_n
的结构体,它包含两个类型为 pbuf
和 netif
的指针。我的目标是编写一个函数,通过按引用调用传递变量local_pbuf
和local_netif
,然后将两个指针包装在一个结构中称为wrapper_p_n。然后我想使用通过引用调用将wrapper_p_n
提供给另一个函数。不幸的是我收到错误消息:
[错误] 无法在赋值中将 'pbuf**' 转换为 'pbuf*'
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
struct pbuf{
int a;
int b;
};
struct netif{
int c;
int d;
};
struct wrapper_p_n{ // wrapper for pbuf- and netif-struct pointer
struct pbuf *wp_val_p;
struct netif *wp_val_n;
};
void rx_local_p_n(struct pbuf *rx_pbuf, struct netif *rx_netif)
{
// wrap the received pointer
struct wrapper_p_n *local_w_p_n;
local_w_p_n->wp_val_p = &rx_pbuf;
local_w_p_n->wp_val_n = &rx_netif;
/*Passing *local_w_p_n pointer to another function: Example: */
/*ex_function(&local_w_p_n)*/
}
int main(int argc, char** argv) {
// give values to local_pbuf and netif
struct pbuf local_pbuf;
local_pbuf.a = 1;
local_pbuf.b = 2;
struct netif local_netif;
local_netif.c = 3;
local_netif.d = 4;
//passing pbuf- and netif-stuct to function
rx_local_p_n(&local_pbuf, &local_netif);
return 0;
}
最佳答案
在函数 void rx_local_p_n
中,您传入指向 pbuf
和 netif
结构体的指针。这些已经是指针,不需要使用运算符 (&) 的地址分配给包装器结构:通过这样做,您将获得指针本身的内存位置。这就是为什么它提示无法将 pbuf** 转换为 pbuf*
。
解决方案
local_w_p_n->wp_val_p = &rx_pbuf;
至local_w_p_n->wp_val_p = rx_pbuf;
local_w_p_n->wp_val_n = &rx_netif;
至local_w_p_n->wp_val_n = rx_netif;
关于c - 使用函数将地址写入结构中的指针失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64050503/