错误:' - >'的无效类型参数(具有'struct xmplrpc_binding')

时间:2017-05-16 22:52:01

标签: c pointers struct

我收到了错误消息:

../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的方式是正确的。

我该怎么做才能解决此错误?

2 个答案:

答案 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 */);

这解决了混乱Arrow operator (->) usage in C