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