#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
typedef struct {
int tos;
char stackarr[];
}STACK;
STACK paren;
paren.tos = -1;
void push()
{
paren.tos++;
paren.stackarr[tos] = '(';
}
这给了我以下错误:
error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
paren.tos = -1;
^
In function ‘push’:
error: ‘tos’ undeclared (first use in this function)
我是个初学者,不知道为什么会犯这个错误。有什么想法吗?
最佳答案
不能在函数外部执行赋值;只允许初始化(demo):
STACK paren = {.tos = -1};
随着这部分的出现,您的方法将不起作用:灵活的成员,即
char stackarr[]
结尾的struct
,不在静态分配的空间中工作;您需要使用它们来进行动态分配。请参阅this Q&A,说明如何使用灵活的结构成员。或者,您可以预先将最大元素数分配给
stackarr
,即。typedef struct {
int tos;
char stackarr[MAX_STACK];
} STACK;
STACK paren = {.tos = -1};
这种方法的明显限制是堆栈不能增长到超过其预分配限制。
关于c - 结构成员访问错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42007173/