1

我正在使用堆栈类,但是每次我将某些内容推送到堆栈时,一旦到达代码推送行,可执行文件就会冻结并停止工作。

我可以请我帮忙看看为什么吗?

我的堆栈.h:

#ifndef STACK_H
#define STACK_H
#include <cassert>

namespace standard
{
    class Stack
    {
    public:
        static const int CAPACITY = 30;
        void stack() {used=0;};
        void push (const char entry);
        void pop();
        bool empty() const;
        int size() const;
        char top() const;
    private:
        char data[CAPACITY];
        int used;
    };
}

#endif

我的堆栈.cpp:

#include "stack.h"

namespace standard
{
    void Stack::push(const char entry)
    {
        assert(size() < CAPACITY);
        data[used] = entry;
        ++used;
    }

    void Stack::pop()
    {
        assert(!empty());
        --used;
    }

    char Stack::top() const
    {
        assert(!empty());
        return data[used-1];
    }

    int Stack::size() const
    {
        return used;
    }

    bool Stack::empty() const
    {
        if (size() == 0)
            return true;
        else
            return false;
    }
}

我的 calc.cpp:

#include "stack.h"
#include <iostream>
#include <fstream>

using namespace std;
using namespace standard;

    void main()
    {
        Stack myStack;
        ifstream input;
        input.open("tests.txt");
        if (input.fail())
        {
            cerr << "Could not open input file." << endl;
            exit(0);
        }
        char i;
        input >> i;
        cout << i;
        myStack.push(i);  // This is where things go wrong.
        cin.get();
    }

谢谢你的帮助!

4

3 回答 3

1

看起来你没有初始化used,你有一些看起来像构造函数的东西,但它不是:

void stack() {used=0;};

这应该是这样的:

Stack() { used=0;};

因此,没有构造函数used将是一些不确定的值,并且最终可能会导致您尝试访问data越界。也main应该经常返回int

于 2013-05-26T01:32:43.643 回答
1
void stack() {used=0;}; 

这应该大写吗?并消除虚空!

Stack myStack;

这应该是

Stack myStack = new Stack();

如果你不初始化它,变量myStack将是一个“空指针”。

于 2013-05-26T01:35:06.187 回答
1

我认为你写错了这个函数:

void stack() {used=0;};
                     //^^extra ; here

应该

Stack() {used = 0;}
//^^Note that constructor has no return type

您从未真正使用过stack返回 void 的成员函数。used这导致从未初始化的事实。您可能是指Stack. 同时,您应该使用构造函数初始化列表:

Stack(): used(0) {}
于 2013-05-26T01:35:13.823 回答