2010-04-07 70 views
1

我有上述錯誤request member rv in something not a structure of union。我GOOGLE了它和幾個答案告訴我一個指針工作時,它可是嘗試訪問它作爲一個結構,我應該使用的->代替.編譯錯誤:請求成員的東西不是工會的結構

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)); 
    ... 
    } 

的問題是所有的論點,我有是指針。我很困惑什麼是錯的。感謝任何意見/想法。

編輯: 對不起&味精,它最初只是味精,但在我絕望的嘗試,我正在嘗試的東西。 添加了rv的定義。

+0

是否缺少一些正確的語法,它說 – WhirlWind 2010-04-07 00:57:26

+1

請顯示'rv'的定義 – 2010-04-07 00:57:55

+0

此外,'csys'的定義可能會有所幫助。 – 2010-04-07 01:12:29

回答

1

msg已經是一個指針。所以也許你應該有msg而不是&msg, 和sizeof(*msg)而不是sizeof(&msg),在你傳遞給sendto的參數中?

+0

抱歉關於&味精的混淆,它最初是味精,但我打錯了它。還sizeof(*味精)不起作用,我仍然得到相同的錯誤,關於它不是結構或聯合。 – 2010-04-07 03:18:06

1

我看到幾個問題,但不一定是導致錯誤的那個問題。您需要提供更多代碼並告訴我們錯誤發生的位置。

問題: 1)爲什麼你在sendto()的調用中使用& msg?味精已經是一個指針了。你的意思是傳遞一個指針指針?

2)sizeof(& msg)評估爲指針的大小。那是你想要的還是你想要的數據大小msg指向?

3)我對你錯誤原因的猜測是csys。它是什麼?它是一個指針還是一個結構?

0

你可以請嘗試下面。

更改下面

 int * socks[MAX_CONNECTION]; 

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

訪問: 「做其他事情」

 int i = *socks[index]; 
+0

我其實沒有得到任何錯誤,謝謝!但是,我如何使用它來引用具有索引的信息? – 2010-04-07 03:24:04

+0

對不起,我的錯誤是,我看錯了行號。我仍然得到同樣的錯誤。 – 2010-04-07 03:40:25

+0

嘗試將以下聲明移至該函數的開始位置。 int * socks [MAX_CONNECTION]; int rv; struct fd_info * info =(struct something *)arg; struct client * csys = info-> c_sys; – Ramakrishna 2010-04-07 03:55:57

相關問題