【问题标题】:compilation error: request member in something not a structure of union编译错误:请求不是联合结构中的成员
【发布时间】:2024-01-08 22:53:01
【问题描述】:

我遇到了上述错误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));
    ...
  }

问题是我所有的参数都是指针。我对出了什么问题感到困惑。感谢任何 cmets/想法。

编辑: 对不起&味精,它最初只是味精,但在我绝望的尝试中,我正在尝试一些事情。 添加了 rv 的定义。

【问题讨论】:

  • 您是否遗漏了一些正确的语法,上面写着“做其他事情”?
  • 请显示rv的定义
  • 另外,csys 的定义可能会有所帮助。
  • sizeof(msg) 返回指针 msg 的大小,而不是 msg 指向的缓冲区大小。
  • 大多数编译器在其错误消息中输出行号。您能否指出示例中的哪一行导致了问题?如果它在rv = sendto(...),也许你可以在每个参数后添加一个回车,它会告诉你编译器在抱怨哪个表达式。

标签: c pointers structure


【解决方案1】:

msg 已经是一个指针。所以也许你应该有msg而不是&msg, 和sizeof(*msg) 而不是sizeof(&msg),在您传递给sendto 的参数中?

【讨论】:

  • 很抱歉关于 &msg 的混淆,它最初是 msg,但我打错了。 sizeof(*msg) 也不起作用,关于它不是结构或联合,我仍然得到同样的错误。
【解决方案2】:

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

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

2) sizeof(&msg) 计算为指针的大小。这是您想要的还是您想要 msg 指向的数据大小?

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

【讨论】:

    【解决方案3】:

    请你试试下面的。

    下面改一下

         int * socks[MAX_CONNECTION]; 
    

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

    访问:

         int i = *socks[index];
    

    【讨论】:

    • 我实际上没有收到任何错误,谢谢!但是如何使用它来引用带有索引的信息呢?
    • 对不起,我错了,我看错了行号。我仍然遇到同样的错误。
    • 尝试将下面的声明移到函数的开头。 int * 袜子[MAX_CONNECTION];国际房车; struct fd_info * info = (struct something *) arg;结构客户端 * csys = info->c_sys;
    最近更新 更多