2014-11-08 10 views
-2

Итак, у меня есть стек, созданный, как показано ниже. Переменная top должна представлять текущий индекс или «верхний индекс». Поэтому, проведя некоторое тестирование, конструктор делает, вызывается, а значение верхнего равно -1, в то время как программа по-прежнему запускает метод-конструктор. Однако, после создания объекта стека, и тестирование, чтобы увидеть, что значение верхней, я получаю сверху быть 32767. Буквально все, что главный делает это создать новый стек, какПочему объект стека меняет значение по умолчанию после создания?

Stack s; //Testing while this is running to see value of top... I get -1 
//Testing here to see value of top... I get 32767 

-

Стек создается, как показано ниже.

#ifndef __STACK_H_ 
#define __STACK_H_ 

    class Stack{ 
    int stackSize; 
    int top; 
    char* items; 
    public: 
    Stack(); 
    ~Stack(); 
    void push(char c); 
    char pop(); 
    bool isFull(); 
    bool isEmpty(); 
}; 

#endif 

И реализация, как показано ниже:

/* STACK IMPLEMENTATION FILE */ 

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

using namespace std; 

Stack::Stack(){ 
    cout << "Ctor is run." << endl; 
    stackSize = 10; //Stack Size is 10 
    int top = -1; //Currently empty stack 
    cout << top << endl; 
    items = new char[stackSize]; 
} 

Stack::~Stack(){ //Destructor 
    delete[] items; 
} 

void Stack::push(char c){ //Push next into stack 
    items[++top] = c; 
    cout << top << endl; 
} 


char Stack::pop(){ //Pop one from stack 
    return items[top--]; 
} 

bool Stack::isFull(){ //Checks to see if stack is full 
    if (top + 1 == stackSize) return true; 
} 

bool Stack::isEmpty(){ //Checks to see if stack is empty 
    if (top == -1) return true; 
} 
+3

'isFull' и' isEmpty' ничего не возвращают, если их тесты 'if' терпят неудачу. – Barmar

ответ

4

top = 1 Вы хотите не int top = 1 в конструкторе. Первый присваивает члену, последний инициализирует локальную переменную, которая выходит за пределы области действия в конце конструктора.

+0

Ах, такая глупая маленькая ошибка, которую я потратил несколько часов, пытаясь понять. Спасибо Алан! – Jay