//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,郁闷死我了,求高人解答
#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,郁闷死我了,求高人解答
应为
#define STACK_SIZE 100
int StackLength(Stack &s)
{
if (!s.base)
{
return ERROR;
}
else return ((s.top-1)-s.base)/sizeof(Emutype);}
为什么
return ERROR;两边的括号去掉就不行了呢