2014-02-23 67 views
0

我剛開始我的網絡分配約聯網,但馬上有一個惱人的錯誤編譯錯誤

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <pthread.h> 
#include <string.h> 

typedef struct client_table{ 
    struct sockaddr_in server_addr; 
    server_addr.sin_family=AF_INET; 
    memset(&server_addr,0,sizeof(server_addr)); 
    struct client_table *next; 
    int client_no; 
} client_table; 

的錯誤消息是

mserver.c:13:2: error: expected specifier-qualifier-list before ‘server_addr’ 

我用Google搜索它但沒有任何幫助。請幫我解決它。提前致謝。

+1

你不能把代碼放入一個類型/結構的定義。那兩條線應該是什麼意思? 'server_addr.sin_family = AF_INET; memset的(&SERVER_ADDR,0,的sizeof(SERVER_ADDR));' – Marian

回答

0

爲了進一步闡述Marion的評論...

‘結構’是一個變量聲明(類似於‘INT I;’),並且不能包含代碼,如server_add的AF_INET的分配.sin_family和memset調用。這些動作必須在別處執行,也許在你的main()中執行?雖然可以預先初始化一個結構,但它必須以類似於初始化任何其他變量(即「int i = 0;」)的方式完成,但是必須指定ALL結構字段的值,並用逗號分隔,用花括號包圍。如果你有嵌套結構(和server_addr一樣),那麼THAT元素的初始化數據必須是ANOTHER結構初始值設定項,指定了所有字段,並再次用大括號括起來。就個人而言,我只是將兩行可執行代碼移至main()並完成它。

這裏是嵌套結構的初始化的更簡化的例子:

struct coord { 
    int x, y; 
}; 
struct box { 
    struct coord upperleft; 
    struct coord lowerright; 
} big_box = { { 10, 10 }, { 0, 0 } };