2013-03-22 71 views
1

首先,我是C新手,對我很裸露。如何在我的.C文件中聲明結構?

我要實現在C鏈表,並根據項目規範,必須在我的頭文件中創建以下結構:

typedef struct node { 
char *string; 
struct node* next; 
} 


typedef struct { 
node *head; /* could have been struct node* as well */ 
node *tail; 
} list; 

現在我怎麼做這些可用在我的.C文件?我已經#include頭文件,但是當我嘗試調用,例如,myList.head,我不斷收到錯誤,指出我正在嘗試對不是結構或聯合的東西執行操作,那麼如何解決這個問題?

+1

一個側面說明,據我所知,.C是C++文件的常規擴展而不是C文件,至少在使用gcc時 – Fingolfin 2013-03-22 02:00:12

+1

頭文件應該被稱爲myList.h而不是'.head '。有關進一步的問題,請始終包含編譯器的實際錯誤消息。釋義太多的信息會被解釋掉。 – kay 2013-03-22 02:01:07

+0

@Kay「頭文件應該叫myList.h,不是.head」 - 呃,應該很明顯,'myList'是'list *',不是文件名,'head'是' list',而不是文件擴展名,並且OP需要'myList-> head'。 「myList-> head」會是一個有問題的文件名。 – 2013-03-22 07:07:34

回答

3

您需要在第一個struct後面加分號。 或者擺脫你的typedef,或者給它一個名字。

+1

typedef的名稱也丟失了。 – kay 2013-03-22 02:00:02

+0

哦對,哎呀:)修正。 – alf 2013-03-22 02:01:03

+0

在實際的代碼中遺漏了分號,在我在這裏輸入代碼時這是一個錯誤 – user1795374 2013-03-22 13:07:44

3

您的typedef是錯誤的。語法是:

typedef [some_type_definition] [type_name]; 

類型定義是這樣的:

struct node { 
    char *string; 
    struct node* next; 
}; 

所以你需要typedef前綴它與node後綴它(分號之前)。這將允許您使用nodestruct node來引用結構。

對於你的清單,你沒有命名結構,但你做了typedef它。這意味着您不能將其稱爲struct list - 您只能使用list。如果需要,您可以命名該結構。

+0

但是我的問題是,如果所有這些都在我的頭文件中,我該如何在我的實際c文件中準確地使用該結構? – user1795374 2013-03-22 13:02:47

+0

在我的C文件中,我有方法在列表和節點中傳遞,但是當我嘗試訪問列表內容(例如傳入的列表頭)時,我被告知結構不是結構。 ..它是 – user1795374 2013-03-22 13:04:11

+0

你只是包括頭。如果你正確地聲明瞭你的類型,那麼當你定義這個類型的變量或指針時,一切都會好的。如果你有'list myList',那麼你可以訪問'myList.head'。如果你有'list * myList',你可以作爲'myList-> head'訪問。 – paddy 2013-03-22 14:28:59