c++ - 由于 #define MAX 在 C++ 中出错

标签 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 时,我没有收到任何错误。为什么会出错?

最佳答案

define MAX 3 ; 行中删除 ;。这将扩展为类似

if(top==3 ;-1)

这绝对不是你想要的。请记住,#define 是预处理器指令,而不是 C 语句。

一个可能更好的主意是将它更改为常量而不是 #define 使用类似的东西

static const unsigned MAX = 3;

这完全避免了所有预处理器。

关于c++ - 由于 #define MAX 在 C++ 中出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18190213/

相关文章:

c++ - 使用 std::array 作为 boost::spirit::x3 的属性

c++ - .get() 和 -> 与智能指针之间有区别吗?

c++ - 我可以将对象分配给整型变量吗?

c++ - vector ,不同大小的图像数组

c# - 解压Zlib数据

c++ - OpenMP 并行代码运行速度较慢

c++ - std::hash ofr 的返回值 (x86/x64)

c++ - 对于需要精度的定点,最好的乘法算法是什么

c++ - 如何在设置 QStyleSheet 后获取 QWidget 背景颜色

c++ - 调用复制构造函数时如何复制内存?