编译错误:请求成员不是union的结构

时间:2010-04-07 00:52:20

标签: c pointers structure

我遇到了上述错误request member rv in something not a structure of union。我用谷歌搜索了几个答案,告诉我这是在使用指针但尝试以结构形式访问它时,我应该使用->代替.

  int foo(void * arg, struct message * msg)
  {
    struct fd_info * info = (struct something *) arg;
    struct client * csys = info->c_sys;
    int * socks[MAX_CONNECTION];
    int rv;
    socks = &(info->_socks); // where int * _socks[MAX_CONNECTION] in struct info

    // do other things

    rv = sendto(socks[i], msg, sizeof(msg), NULL, &(csys->client_address), sizeof(csys->client_address));
    ...
  }

问题是我所有的论据都是指针。我对什么是错的感到困惑。感谢任何意见/想法。

编辑: 抱歉& msg,它最初只是消息,但在我绝望的尝试中我正在尝试的事情。 添加了rv。

的定义

3 个答案:

答案 0 :(得分:1)

msg已经是一个指针。所以也许你应该msg而不是&msg, 您传递给sizeof(*msg)的论据中sizeof(&msg)代替sendto

答案 1 :(得分:1)

我看到了一些问题,但不一定是造成错误的问题。您需要提供更多代码并告诉我们错误发生的位置。

问题: 1)为什么在调用sendto()时使用& msg? msg已经是一个指针。你的意思是将指针传递给指针吗?

2)sizeof(& msg)计算指针的大小。这是你想要的,或者你想要msg指向的数据大小?

3)我对你的错误原因的猜测是csys。它是什么?它是指针还是结构?

答案 2 :(得分:0)

请你试试下面的内容。

更改以下

     int * socks[MAX_CONNECTION]; 

     int** socks;
     *socks = &(info->_socks); 

访问:

     int i = *socks[index];