只有在开头有一个cout语句时,调用一个函数才会给出结果

时间:2013-05-27 21:28:37

标签: c++ class

我正在尝试用C ++实现一个简单的堆栈。我的代码工作正常,除了这个函数minm()。我的结果非常出乎意料。如果我以粗体注释掉该行,那么我的程序甚至都没有运行。另外,你可以看到我的函数minm()和amp;之间的唯一区别。 minmm()是粗线。请帮帮我。

解释如下:

函数minm()&正在考虑的minmm()是 italic &这一行 cout<<“被称为”<< endl; 粗体

#include<iostream>
using namespace std;

const int MAX_ALLOWED_SIZE = 100000000;

class MyStack{
    int *a;
    int *min, *max;
    int top;
    int size;

    public:
        MyStack(int s=MAX_ALLOWED_SIZE);
        void push(int i);
        int pop();
        int maxm();

        int minm()  // This function is failing
        {
            //cout<<"called\t";
            if(!stackEmpty())
            {
                cout<<min[top]<<" = " <<a[min[top]]<<endl;
                return a[min[top]];
            }
            return NULL;
        }

        int minmm()   // This function is working
        {
            cout<<"called\t";
            if(!stackEmpty())
            {
                cout<<min[top]<<" = " <<a[min[top]]<<endl;
                return a[min[top]];
            }
            return NULL;
        }

        bool stackEmpty();
        void printStack();
};

int main()
{
    MyStack s;
    int t;

    while(true)
    {
        scanf("%d",&t);
        s.push(t);
        cout<<"min = "<<s.minm()<<endl;
        cout<<"min = "<<s.minmm()<<endl;

        if(t==-1) break;

    }
}

输入:

234
23
-1

输出:

min = 0
called  a[0] = 234
min = 234

min = 0
called  a[1] = 23
min = 23

min = 0
called  a[2] = -1
min = -1

现在,我在ideone上的两个函数得到相同(错误)的结果,而函数minmm()在我的系统上返回(我在Code :: Blocks 12.11中使用GNU GCC编译器)。

1 个答案:

答案 0 :(得分:1)

在你的堆栈中,你没有返回false:

bool stackEmpty(){
    if(top == -1) return true;
    return false;
}

bool stackEmpty(){
    return (top == -1);
}