如何将c结构体定义转换为c++

How to convert c struct definitions to c++

本文关键字:转换 c++ 定义 结构体      更新时间:2023-10-16
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’

c++不支持这种语法。试试这个:

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

或者:

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

你正在尝试的是C99的一个叫做"复合文字"的特性。另外,.iov_base也被称为"指定初始化器"。

复合字量在c++中不存在。您可以像cnicutar建议的那样单独分配结构成员,或者您也可以定义一个临时对象,然后将其分配给iov的第一个数组元素。这样的:

iovec iov_temp = {&req, sizeof req}; 
iov[0] = iov_temp;