C++ typedef struct 引起的expected unqualified-id before...错误

来源:互联网 发布:社区控烟网络会议记录 编辑:程序博客网 时间:2024/06/05 06:48

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

阅读全文
0 0