2012-01-01 62 views
2
iov[0] = (struct iovec) { 
    .iov_base = &req, 
    .iov_len = sizeof(req) 
}; 

我想一些代码转换从SS的网络工具到C++,和上面的和类似的一直给这些错误:如何C结构的定义转换为C++

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

回答

9

C++不支持该语法。试试这个:

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

或许:

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

什么你试图为所谓的 “复合文字” C99的功能。此外,.iov_base的东西被称为“指定初始值设定项”。

+0

复合文字在C++ 11中是否可用? – 2012-01-01 21:54:56

+0

@JaredKrumsie不知道,但不这么认为。但是,g ++应该将其作为扩展来支持它。 – cnicutar 2012-01-01 22:01:41

+0

谢谢,我感谢帮助。快速而有用的答案就像是你的,当我陷入困境时,我会回到这个网站。 – 2012-01-02 01:30:18

0

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

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