由于#define MAX导致C ++出错

时间:2013-08-12 14:53:55

标签: c++

我刚刚在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 3return NULL时,我没有收到错误。为什么会出错?

2 个答案:

答案 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;