2017-02-02 4 views
1
#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) 

Я новичок, и понятия не имею, почему я получаю эту ошибку. Есть идеи?

ответ

3

Вы не можете выполнить назначение вне функции; только инициализации допускается (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}; 

Очевидным ограничением этого подхода является то, что стек не может расти за пределы допустимого предраспределения.

Смежные вопросы