我刚刚在C ++中开发了一个简单的堆栈程序。
#include<iostream>
#define MAX 3;
using namespace std;
class stack
{
private:
int arr[3];
int top;
public:
stack()
{
top=-1;
}
void push(int item)
{
if(top==MAX-1)
{
cout<<endl<<"STACK FULL";
return;
}
top++;
arr[top]=item;
cout<<endl<<"Pushed "<<item;
}
int pop()
{
if(top==-1)
{
cout<<endl<<"STACK EMPTY";
return NULL;
}
int temp=arr[top];
top--;
return temp;
}
};
int main()
{
stack s;
s.push(1);
s.push(2);
s.push(3);
s.push(4);
cout<<endl<<"Popped "<<s.pop();
cout<<endl<<"Popped "<<s.pop();
cout<<endl<<"Popped "<<s.pop();
cout<<endl<<"Popped "<<s.pop();
}
我把这作为礼物
naveen@linuxmint ~/Desktop/C++ $ g++ stack.cpp -o stack
stack.cpp: In member function ‘void stack::push(int)’:
stack.cpp:18:11: error: expected ‘)’ before ‘;’ token
stack.cpp:18:16: error: expected ‘;’ before ‘)’ token
stack.cpp: In member function ‘int stack::pop()’:
stack.cpp:32:11: warning: converting to non-pointer type ‘int’ from NULL [-Wconversion-null]
当我删除# define MAX 3
和return NULL
时,我没有收到错误。为什么会出错?
答案 0 :(得分:19)
从;
行中删除define MAX 3 ;
。这将扩展到类似
if(top==3 ;-1)
绝对不是你想要的。请记住,#define
是预处理程序指令,而不是C语句。
可能更好的想法是使用类似
之类的内容将其更改为常量而不是#define
static const unsigned MAX = 3;
完全避免了所有预处理器。
答案 1 :(得分:12)
在#define
中定义常量不是一个好主意。
将#define MAX 3;
更改为#define MAX 3
相关文章: - Do not conclude macro definitions with a semicolon
另一种选择可能是: -
static const unsigned MAX = 3;