我收到了错误消息:
../usr/examples/xmpl-rpc/rpc_rpc.c: In function ‘send_myrpc’:
../usr/examples/xmpl-rpc/rpc_rpc.c:40:25: error: invalid type argument of ‘->’ (have ‘struct xmplrpc_binding’)
err = xmplrpc_client->rpc_tx_vtbl.myrpc(&xmplrpc_client, in, &s_out);
^
并且xmplrpc_client
的定义是:
static struct xmplrpc_binding xmplrpc_client;
结构xmplrpc_binding
有
struct xmplrpc_rpc_tx_vtbl rpc_tx_vtbl;
结构xmplrpc_rpc_tx_vtbl
是
struct xmplrpc_rpc_tx_vtbl {
xmplrpc_myrpc__rpc_tx_method_fn *myrpc;
};
显然xmplrpc_client.rpc_tx_vtbl.myrpc
是错误的方式,我认为我写xmplrpc_client->rpc_tx_vtbl.myrpc
的方式是正确的。
我该怎么做才能解决此错误?
答案 0 :(得分:1)
当操作数(显示在运算符的 left 中)是指向->
或struct
类型的指针时,使用union
运算符,当操作数是.
或struct
类型的实例时,union
。{/ p>
因此...
xmplrpc_client
被声明为struct xmplrpc_binding
的实例,因此您可以使用.
运算符访问其中的任何成员:< / p>
xmlrpc_client.rpc_tx_vtbl
成员rpc_tx_vtbl
被声明为struct mplrpc_rpc_tx_vtbl
的实例,因此,您再次使用.
运算符访问其中任何一个成员:
xmlrpc_client.rpc_tx_vtbl.myrpc
因此,你应该写下你的电话
err = xmplrpc_client.rpc_tx_vtbl.myrpc(&xmplrpc_client, in, &s_out);
答案 1 :(得分:0)
为了修复错误,你应该这样写
xmplrpc_client.rpc_tx_vtbl.myrpc(/* and args */);