//stack.h
#define OK 1;
#define ERROR 0;
#define NO 0;
typedef int Emutype;
typedef int Status;
typedef struct 
{
Emutype *base;
Emutype *top;
int size;
}Stack;
Status GetTop(Stack &,Emutype &);
Status Push(Stack &,Emutype &);
Status Pop(Stack &,Emutype &);
Status InitStack(Stack &);
Status DestoryStack(Stack &);
Status ClearStack(Stack &);
Status StackEmpty(Stack &);
int StackLength(Stack &);#include "stack.h"
#include "stdio.h"
#include "stdlib.h"
//int const STACK_SIZE=100;
//int const STACK_SIZE_ADD=10;
#define STACK_SIZE 100;
#define  STACK_SIZE_ADD 10;

Status GetTop(Stack & s,Emutype & e)
{
if (s.base && s.base!=s.top)
{
e=*(s.top-1);
return OK;
}
else return ERROR;}//取得栈顶的元素
Status Push(Stack & s,Emutype & e)
{
if ((s.top-s.base)>s.size-1)
{

s.base=(Emutype *)realloc(s.base,(s.size+ STACK_SIZE_ADD)*sizeof(Emutype));

if (!s.base)
{
return ERROR;
}
s.top=s.base+s.size;
s.size+=STACK_SIZE_ADD;
return OK;
}
*(s.top++)=e;
} //压栈
Status Pop(Stack & s,Emutype & e)
{
if(s.base!=NULL&& s.base!=s.top)
{
*(--s.top)=e;
return  OK;
}
else return ERROR;

}//出栈
Status InitStack(Stack &s)
{
s.base=(Emutype *)malloc(STACK_SIZE*sizeof(int));
if(!s.base)
{ return ERROR;}
else
{ s.top=s.base;
s.size=STACK_SIZE;
return OK;
}
}//新建一个空栈
Status DestoryStack(Stack & s)
{
if (s.top>=s.base && s.base!=NULL)
{
free(s.base);
s.base=s.top=NULL;
s.size=0;
}
else return ERROR;}//删除栈
Status ClearStack(Stack & s)
{
if (s.top>=s.base && s.base!=NULL)
{
s.top=s.base;
s.size=0;
return OK;
}
else
{
return ERROR;
}
}//清空栈
Status StackEmpty(Stack & s)
{
if (!s.base) {
return ERROR;
} else
{
if (s.top==s.base)

return OK;
}
else return NO;

}
}//检查是否为空栈
int StackLength(Stack &s)
{
if (!s.base)
{
return ERROR;
}
else return ((s.top-1)-s.base)/sizeof(Emutype);}
int main()
{}编译时出现错误------ 已启动生成: 项目: 二进制转换, 配置: Debug Win32 ------
正在编译...
stack.cpp
d:\my documents\visual studio 2008\projects\stack\stack\stack.cpp(23) : error C2143: 语法错误 : 缺少“)”(在“;”的前面)
d:\my documents\visual studio 2008\projects\stack\stack\stack.cpp(23) : error C2143: 语法错误 : 缺少“)”(在“;”的前面)
d:\my documents\visual studio 2008\projects\stack\stack\stack.cpp(23) : error C2059: 语法错误 : “)”
d:\my documents\visual studio 2008\projects\stack\stack\stack.cpp(23) : error C2100: 非法的间接寻址
d:\my documents\visual studio 2008\projects\stack\stack\stack.cpp(23) : error C2059: 语法错误 : “)”
d:\my documents\visual studio 2008\projects\stack\stack\stack.cpp(49) : error C2143: 语法错误 : 缺少“)”(在“;”的前面)
d:\my documents\visual studio 2008\projects\stack\stack\stack.cpp(49) : error C2100: 非法的间接寻址
d:\my documents\visual studio 2008\projects\stack\stack\stack.cpp(49) : error C2059: 语法错误 : “)”
生成日志保存在“file://d:\My Documents\Visual Studio 2008\Projects\二进制转换\二进制转换\Debug\BuildLog.htm”
二进制转换 - 8 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========但是如果把
#define STACK_SIZE 100;
#define  STACK_SIZE_ADD 10;
改为
int const STACK_SIZE=100;
int const STACK_SIZE_ADD=10;就能成功编译了,为什么?求解。。int StackLength(Stack &s)
{
if (!s.base)
{
return ERROR;
}
else return ((s.top-1)-s.base)/sizeof(Emutype);}------ 已启动生成: 项目: 二进制转换, 配置: Debug Win32 ------
正在编译...
stack.cpp
d:\my documents\visual studio 2008\projects\stack\stack\stack.cpp(98) : error C2181: 没有匹配 if 的非法 else 
生成日志保存在“file://d:\My Documents\Visual Studio 2008\Projects\二进制转换\二进制转换\Debug\BuildLog.htm”
二进制转换 - 1 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
还有有一点不明白就是下面这段代码,如果去掉return ERROR;两边的括号也不能编译成功,错误如上。。用的编译器是VS2008,郁闷死我了,求高人解答

解决方案 »

  1.   

    #define STACK_SIZE 100;
    应为
    #define STACK_SIZE 100
      

  2.   

    楼上正解,define是文本代换,将;也代换进去了,const,是一个数据类型,不会有错误;,你改正下应该可以
      

  3.   

    感谢楼上的解答,一言惊醒梦中人啊,那还有这个呢
    int StackLength(Stack &s)
    {
    if (!s.base)
    {
    return ERROR;
    }
    else return ((s.top-1)-s.base)/sizeof(Emutype);}
    为什么
    return ERROR;两边的括号去掉就不行了呢
      

  4.   

    同样是因为你的#define后面有;的原因,都去掉吧。