C++ typedef struct 引起的expected unqualified-id before...錯誤

環境ubuntu 14.04 

自己寫的一個C++小程序,在定義結構體的時候,使用了typedef struct structName{...};結果一直提示expected unqualified-id before錯誤,就是在對structName裏面的成員進行賦值的時候提示的這個錯誤。在C++中說的很清楚,定義結構體的時候typedef 可有可無。所以爲了跟c編碼一致,我就加了typedef,然後就拋了這樣的錯誤。不理解。。。

然後後來仔細查了一下,發現當初學的C/C++都忘光了。我的結構體定義如下

typedef struct stack{

    typedef struct link{

        void  * data;

        link* next;

        void initialize(void * data, link * next);

     } * head;

     void initialize();

     void push(void * data);

     void * peek();

     void * pop();

     void cleanup();

};

查閱了一些資料首先說一下自己寫的代碼的錯誤地方。

typedef struct stack{

....

};

在C++中相當於先定義struct stack{};然後使用typedef struct stack stackAnotherName;給原來的Struct stack 定義了一個別名叫做 stackAnotherName。而我的程序中在結束的時候,並沒有給Struct stack起一個別名,相當於寫了一行這樣的代碼typedef struct stack;,所以這個地方是錯誤的。

在這個地方

    typedef struct link{

        void  * data;

        link* next;

        void initialize(void * data, link * next);

     } * head;

其實就像是相當於定義了一個link 的數據結構,然後使用typedef struct link * head;也就是給struct link * 起了一個別名叫做head,因而在我每次引用成員變量head的時候都會提示expected unqualified-id before....。

正確的代碼應該是這樣,這裏面的head就是我定義的成員變量。就沒有問題了。

typedef struct stack{

    struct link{

        void  * data;

        link* next;

        void initialize(void * data, link * next);

     } * head;

     void initialize();

     void push(void * data);

     void * peek();

     void * pop();

     void cleanup();

}Stack;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章