联合分配的不兼容类型错误
Posted
技术标签:
【中文标题】联合分配的不兼容类型错误【英文标题】:Incompatible types error for union assignment 【发布时间】:2018-04-21 22:38:25 【问题描述】:一旦 XDR 联合由 svc_getargs() RPC 调用填充,我正在尝试将 XDR 联合分配给结构联合。但是,我在执行此操作时收到“类型不兼容”错误。我也试过 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”,使其具有老板-工人模式的多线程 (MT)。自动生成的文件非常适合单线程部分。但是对于 MT 部分,我需要从 Boss 线程中获取“argument”变量并将其提供给工作线程;然后工作线程从服务器获取所需的数据(缩小的图像)并返回给客户端。
【问题讨论】:
为什么工会只有一个成员? 你的工会未命名。 那个联合是由 rpcgen 生成的。我无法控制它。 发布的代码无法编译,原因包括缺少stdlib.h
和string.h
头文件。联合缺少“标签”名称,没有原型:svc_getargs()
和 svcerr_decode()
@user3629249:那些 cmets 不是很有帮助。我们已经知道问题是什么,我们不需要 MVCE 来诊断或讨论它。这些 cmets 指出的东西并不是完整代码中的实际问题,因为它无疑定义了各种项目并包含必要的标题。
【参考方案1】:
两个没有标签的联合(或结构)被认为是不同的类型,即使它们有相同的声明。不同的联合(或结构)不兼容(在翻译单元内)。
要在多个地方使用同一个联合,先用标签声明它:
union MyTag contents of union… ;
然后使用它的标签名称引用它,如union MyTag argument;
。
【讨论】:
以上是关于联合分配的不兼容类型错误的主要内容,如果未能解决你的问题,请参考以下文章
从“NSEntityDescription *”分配给“NSManagedObject Subclass*”的不兼容指针类型
指向分配给“NSInteger”(又名“int”)的整数转换的不兼容指针