推送自定义堆栈类冻结.exe

时间:2013-05-26 01:30:07

标签: c++ class stack

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

我可以请一些帮助吗?

我的stack.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

我的stack.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();
    }

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

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

void stack() {used=0;};

它应该是这样的:

Stack() { used=0;};

因此,如果没有构造函数used将会是一些不确定的值,并且可能最终会导致您尝试访问data出界。另外,main应始终返回int

答案 1 :(得分:1)

void stack() {used=0;}; 

这应该大写吗? &安培;删除空白!

Stack myStack;

应该是

Stack myStack = new Stack();

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

答案 2 :(得分:1)

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

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

应该是

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

您从未真正使用返回void的stack成员函数。这导致used从未初始化。你可能意味着Stack的构造函数。同时,您应该使用构造函数初始化列表:

Stack(): used(0) {}