2016-09-29 3 views
2
struct TodoItem 
{ 
    std::string todo; 
}; 

const int MAX_STACK_SIZE = 5; 

class TodoStackArray 
{ 
    public: 
    TodoStackArray(); //confusion here<--- 
    bool isEmpty(); 
    bool isFull(); 
    void push(std::string todoItem); 
    void pop(); 
    TodoItem* peek(); 

    /* for grading purposes we need these following methods */ 
    int getStackTop() { return stackTop; } 
    TodoItem** getStack() { return stack; } 

    private: 
    int stackTop; 
    TodoItem* stack[MAX_STACK_SIZE]; 
}; 

Выше, это некоторые декларации и класс из файла заголовка для текущего назначения. Наш долг состоял в том, чтобы реализовать программу стека, используя этот файл заголовка. Тем не менее, я немного запутался в отношении цели TodoStackArray() в файле заголовка. Предполагается, что это базовый конструктор? Я должен использовать его для чего-нибудь?Недоразумение в использовании переменных класса из файла заголовка

Я понимаю, что это определенная ситуация, но учитывая, что массивы стека - это STL. Я полагал, что вы все можете дать некоторое представление. Благодаря!

В случае, если вы хотите увидеть, что я сделал с этим файлом заголовка ...

TodoStackArray::TodoStackArray() //This, unsurprisingly, produces an error. 
{ 
    stackTop = -1; 
    stack[stackTop]; 
} 

bool TodoStackArray::isEmpty() 
{ 
    return (stackTop == -1); 
} 

TodoItem* TodoStackArray::peek() 
{ 
    if(stackTop ==-1) 
    { 
     cout<< "Stack empty, cannot peak."<<endl; 
    } 
    else 
    { 
     return(stack[stackTop]); 
    } 
} 
bool TodoStackArray::isFull() 
{ 
    return(stackTop == 4); 
} 

void TodoStackArray::push(std::string todoItem) 
{ 
    if(stackTop >= 5) 
    { 
     cout<<"Stack full, cannot add new todo item."<<endl; 
    } 
    else 
    { 
     stack[stackTop++]; 
     stack[stackTop]->todo = todoItem; 
    } 
} 

void TodoStackArray::pop() 
{ 
    if(stackTop == -1) 
    { 
     cout<<"Stack empty, cannot pop an item."<<endl; 
    } 
    else 
    { 
     stackTop--; 
    } 
} 

Кроме того, чтобы быть ясно, что мы не предусмотрено программное обеспечение драйвера. Они будут оценивать свои собственные вещи, поэтому нам нужно написать собственное программное обеспечение для тестирования наших функций. Следовательно, отсутствие какой-либо основной реализации.

+1

Из быстрого чтения я вижу, что вы выполняете 'stack [stackTop];', который равен 'stack [-1];'. Что вы пытаетесь сделать с этой инструкцией? –

+1

Я получаю сообщение об ошибке: "Тип возвращаемого типа для конструктора недействителен" @ 8:30, void TodoStackArray :: TodoStackArray() – Derp

+0

_TodoStackArray() "в файле заголовка. Предполагается, что это базовый конструктор? Я должен использовать его для чего-нибудь? ? _ TodoStackArray() - это конструктор, который используется для инициализации экземпляра класса.Вы можете использовать это, чтобы инициализировать своих членов класса здесь. – Pabdev

ответ

1

Да, TodoStackArray::TodoStackArray() действительно является конструктором по умолчанию вашего класса.

То, что вы должны делать с ним так же, как с конструктором любого по умолчанию:

Как члены класса должны быть инициализированы если я создаю новый TodoStackArray?

Ответ зависит от того, как должен выглядеть ваш класс в его первоначальном состоянии.

В вашей ситуации «по умолчанию» стек равен пустой. Установка stackTop на -1 была неплохой идеей, и вся остальная часть вашей реализации согласуется с этим (stackTop == -1 явно означает «пустой стек»).

Самое странное, что происходит в конструкторе это:

stack[stackTop]; 

Что, по вашему мнению, цель этой линии? Вы указали значение в вашем массиве с отрицательным индексом, и все мы знаем, что такие вещи никогда не заканчиваются хорошо.

Конструкторы предназначены для инициализации ваших данных. Здесь вы читаете то, что не инициализировали по индексу, который не существует. Не имеет большого смысла, не так ли? :)

Просто избавитесь от этой линии, и вы сможете двигаться дальше. Вот эквивалентная реализация с использованием member initializer list (которые считаются лучше):

TodoStackArray::TodoStackArray() : stackTop(-1) 
{ 
    // notice: no body required here 
} 

Удачи!

+0

Это исправило это, спасибо! – Derp

 Смежные вопросы

  • Нет связанных вопросов^_^