2017-02-02 25 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}; 

このアプローチには明らかな制限は、スタックは、その事前割り当ての制限を超えて成長することができないということです。