環境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;