ошибка компиляции: запрос члена в чем-то, не являющемся структурой объединения - PullRequest
1 голос
/ 07 апреля 2010

У меня вышеупомянутая ошибка 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));
    ...
  }

Проблема в том, что все аргументы, которые у меня есть, это указатели. Я запутался в том, что не так. спасибо за любые комментарии / мысли.

EDIT: извините за & msg, это было первоначально просто msg, но в моей отчаянной попытке я пытался. добавлено определение рв.

Ответы [ 3 ]

1 голос
/ 07 апреля 2010

Я вижу пару проблем, но не обязательно ту, которая вызывает вашу ошибку. Вам нужно будет предоставить больше кода и сообщить нам, где происходит ошибка.

Проблемы: 1) почему вы используете & msg в вызове sendto ()? MSG уже указатель. Вы хотите передать указатель на указатель?

2) sizeof (& msg) соответствует размеру указателя. Это то, что вы хотите, или вы хотите, чтобы размер данных MSG указывает?

3) Мое предположение относительно причины вашей ошибки - csys. Что это? Это указатель или структура?

1 голос
/ 07 апреля 2010

msg уже указатель. Так что, возможно, вы должны иметь msg вместо &msg, и sizeof(*msg) вместо sizeof(&msg) в аргументах, которые вы передаете sendto?

0 голосов
/ 07 апреля 2010

Можете ли вы попробовать ниже.

Изменить ниже

     int * socks[MAX_CONNECTION]; 

до

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

Доступ:

     int i = *socks[index];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...