【发布时间】:2012-09-26 18:26:48
【问题描述】:
我用 C 编码已经很久了,现在我什至无法创建链表:(NodeType 结构可能有什么问题?
我什至尝试了this 示例,但仍然出现类似的错误。
我需要创建可以在 linux 和 windows 上运行的链表(无需大量修改)。
我使用:cl myFile.c 命令编译。
错误信息:
Microsoft (R) 32 位 C/C++ 优化编译器版本 16.00.40219.01 对于 80x86 版权所有 (C) Microsoft Corporation。保留所有权利。
unlock.c unlock.c(46) : error C2275: 'Node' : 非法使用这种类型 作为表达 unlock.c(17):参见“节点”的声明 unlock.c(46):错误 C2146:语法错误:缺少“;”在标识符 'a' unlock.c(46) 之前: 错误 C2065:“a”:未声明的标识符
源代码:
#include <stdio.h>
#include <windows.h>
#include<stdlib.h>
typedef enum {STABLE, RPUSH, LPUSH} STATUS_TYPE;
typedef struct NodeType
{
struct NodeType* _left;
struct NodeType* _right;
int _value;
}Node;
typedef struct AnchorType
{
struct Node* _mostLeft;
struct Node* _mostRight;
STATUS_TYPE _status;
} Anchor;
Node CreateNode(int data)
{
Node newNode;
newNode._value = data;
newNode._left = NULL;
newNode._right = NULL;
return newNode;
}
int main()
{
Anchor anchor;
anchor._mostLeft = NULL;
anchor._mostRight = NULL;
anchor._status = STABLE;
Node a; //<-- What might be wrong ?
return 0;
}
感谢您的帮助。
【问题讨论】:
-
请注意,
struct AnchorType定义中的_mostLeft和mostRight成员应仅声明为Node*或struct NodeType *。 -
可能来自
windows.h的一些垃圾会搞砸事情。如果删除该包含,它会编译吗? (它应该是,因为它是合法的 C,尽管 pb2q 指出了你犯的一个错误。) -
@DanielFischer:C99 是合法的,但他的编译器不支持 C99。该程序不是合法的 C89/C90。
-
@BenVoigt 啊,总是忘记微软编译器是 C89。
标签: c windows visual-studio linked-list