我试图在C中定义两个结构体,当第二个结构体使用第一个作为数组成员,并有自己的两个指针成员。
Visual Studio不喜欢我的代码
语法错误:'}'
语法错误:标识符'tokenListNode'
语法错误:在"*"之前缺少"{"
你知道怎么解决这个问题吗?
-->请注意,无论有没有我在代码开头添加的声明,错误都会出现。
-->另外,如果有人能给我解释一下标识符的区别是什么在结构体的花括号之前和之后,我很感激。
代码如下:
#define ARRAY_SIZE 100
struct tokenListNode;
struct TOKEN_LIST_NODE;
enum TOKEN_TYPE
{
id = 0,
INT_NUM,
INT_REAL,
ASSIGNMENT_OP,
RELATION_OP,
ARITHMETIC_OP
} tokenType;
typedef struct TOKEN
{
char* lexema;
enum TOKEN_TYPE type;
int lineNumber;
} token;
typedef struct TOKEN_LIST_NODE
{
token tokenArray[ARRAY_SIZE];
tokenListNode* prevNode;
tokenListNode* nextNode;
int tokenCounter;
}tokenListNode;
在之后才定义tokenListNode
。改成如下:
typedef struct TOKEN_LIST_NODE tokenListNode;
struct TOKEN_LIST_NODE
{
token tokenArray[ARRAY_SIZE];
tokenListNode* prevNode;
tokenListNode* nextNode;
int tokenCounter;
};
结构的定义由关键字struct
组成;struct标签;结构体成员
struct tag { int member1; /* &c */ };
你可以把标签去掉,然后创建一个未命名的结构…为什么要这样做是另一回事:没有struct标记就不能引用结构!
struct { int member1; /* &c */ };
也可以取任意类型,并使用typedef
typedef old_type new_name;
和
typedef struct tag { int member1; /* &c */ } tag;
/* <------------ old type ------------> <new name> */
上面这行定义了一个结构体(名为struct tag
),同时给这个类型起了一个新名字:tag
结构体的花括号
前后标识符的区别是什么?
这是struct
和typedef
混合定义的结果。{}
前面的名称是该结构的"标签",{}
后面的名称是该类型为typedef
'd的新名称。
在引用自身时,您需要使用struct标记而不是它的类型定义版本。
struct TOKEN_LIST_NODE
{
token tokenArray[ARRAY_SIZE];
struct TOKEN_LIST_NODE* prevNode;
struct TOKEN_LIST_NODE* nextNode;
int tokenCounter;
};