弹出堆栈中的前2个值,添加它们并将其推回

时间:2013-06-02 04:00:34

标签: c++

这是我想出的,我只是希望程序弹出堆栈中的前2个值,计算它们并将其推回到堆栈中...我已经创建了所需的函数但似乎有添加两个数字的函数存在问题。

#include <iostream>   

using namespace std;
int Maxlenght=5;
class stackhouse{
private:
    int *CreateArray;
    int top;
public:
    stackhouse();
    bool IsEmpty();
    bool IsFull();
    void constructor();
    void Push(int);
    void Pop(int);
    void Sum();
    void Sub();
};
stackhouse::stackhouse(){
    CreateArray= new int[Maxlenght];
    top=-1;
}
bool stackhouse::IsEmpty()
{
    if (top==-1) return 1;
    else return 0;
}
bool stackhouse::IsFull(){
    if (top==Maxlenght-1) return 1;
    else return 0;
}
void stackhouse::Push(int number){
    top++;
    CreateArray[top]=number;
}
void stackhouse::Pop (int number){
    number=CreateArray[top];
    top--;
}
void stackhouse::Sum(){
    int number=7,sum=5;
    Pop(sum);
    Pop(number);
    sum+=number;
    Push(sum);
    cout<<sum;
}
void main(){
    int number;
    stackhouse stack1;
    stackhouse();
    cout<<"Please fill the stack...";
    stack1.Push(5);
    stack1.Push(2);
    cout<<"The sum is...";
    stack1.Sum();
}

2 个答案:

答案 0 :(得分:3)

Pop函数需要返回number或通过引用传递number;否则,number的分配无效。

void stackhouse::Pop(int& number) {  // <-- add the &
    number = CreateArray[top];
    top--;
}

或者

int stackhouse::Pop() {
    int number = CreateArray[top];
    top--;
    return number;
}

(请注意,第二种方式要求您编写sum = Pop()而不是Pop(sum)。)

答案 1 :(得分:1)

按值传递参数到pop()方法是没有意义的。它需要返回一个值。