Как преобразовать определения структуры c в c ++ - PullRequest
2 голосов
/ 02 января 2012
iov[0] = (struct iovec) {
    .iov_base = &req,
    .iov_len = sizeof(req)
};

Я пытаюсь преобразовать немного кода из сетевой утилиты ss в c ++, и приведенные выше и другие подобные сообщения выдают следующие ошибки:

main.cpp|83|error: expected primary-    expression before ‘struct’
main.cpp|83|error: expected ‘)’ before ‘struct’

Ответы [ 2 ]

9 голосов
/ 02 января 2012

C ++ не поддерживает этот синтаксис.Попробуйте это:

iovec iov[2];
iov[0].iov_base = &req;
iov[0].iov_len = sizeof req;
/* ... */

Или, может быть:

iovec iov[] = {
    {
       &req, sizeof req
    },
    /* ... */
}

То, что вы пытались, это функция C99, называемая «составные литералы».Также, вещь .iov_base называется «назначенным инициализатором».

0 голосов
/ 02 января 2012

Составные литералы отсутствуют в C ++. Вы можете назначить членов структуры по отдельности, как предложено cnicutar, или вы также можете определить временный объект, а затем назначить его iov первому элементу массива. Как это:

iovec iov_temp = {&req, sizeof req}; 
iov[0] = iov_temp;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...