#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/

10-11 16:30