gpt4 book ai didi

c - union 赋值的不兼容类型错误

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

一旦 svc_getargs() RPC 调用填充了 XDR union ,我就尝试将 XDR union 分配到结构 union 中。但是,我在执行此操作时收到“类型不兼容”错误。我也尝试过 memcpy() 但也有同样的问题。下面是我的代码。感谢您的帮助。

struct data_str {
struct svc_req *rqstp;
SVCXPRT *transp;
bool_t retval;
xdrproc_t _xdr_result;
//outputImage get_minified_image_1_res;
//inputImage get_minified_image_1_arg;
union {
inputImage get_minified_image_1_arg;
} argument;
bool_t (*local)(char *, void *, struct svc_req *);
};

static void
minify_image_program_1(struct svc_req *rqstp, register SVCXPRT *transp) {

struct data_str *req_holder;
union {
inputImage get_minified_image_1_arg;
} argument;
union {
outputImage get_minified_image_1_res;
} result;
xdrproc_t _xdr_argument, _xdr_result;
bool_t (*local)(char *, void *, struct svc_req *);

req_holder = malloc(sizeof(*req_holder));
req_holder->rqstp = rqstp;
req_holder->transp = transp;

memset((char *) &argument, 0, sizeof(argument));
if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
svcerr_decode(transp);
return;
}
req_holder->_xdr_result = _xdr_result;
req_holder->argument = argument; // THIS IS WHERE I GET THE ERROR
req_holder->local = local;
return;
}

编辑:更多背景信息。这是一个围绕远程过程调用 (RPC) 有两个部分的项目 - 第一个是单线程服务器,第二个是多线程服务器。上面的代码是第二部分,我试图修改 RPC 自动生成的“svc”,使其成为具有 boss-worker 模式的多线程 (MT)。自动生成的文件非常适合单线程部分。但对于 MT 部分,我需要从 Boss 线程获取“argument”变量并将其提供给工作线程;然后工作线程从服务器获取所需的数据(缩小的图像)并返回给客户端。

最佳答案

两个没有标签的 union (或结构)被认为是不同的类型,即使它们具有相同的声明。不同的 union (或结构)是不兼容的(在翻译单元内)。

要在多个地方使用相同的 union ,首先使用标签声明它:

union MyTag { contents of union… };

然后使用其标签名称引用它,如union MyTag argument;

关于c - union 赋值的不兼容类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49960793/

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