2012-01-01 68 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;