我正在使用堆栈类,但是每当我将某些内容推送到堆栈时,可执行文件会冻结,并在达到代码行推送后停止工作。
我可以请一些帮助吗?
我的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();
}
感谢您的帮助!
答案 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) {}