C++ - Приватная структура - стек

345
08 ноября 2017, 02:28

Мне нужно создать стек-структуру. Данные структуры должны быть private или protected.

Вот содержание .h файла :

    #include "stdafx.h"
    private:
    class MyStack
    {
        struct Stack
        {
            int data;
            struct Stack *Tail, *Head;
        };

    public:
        MyStack();
        ~MyStack();
        void ShowData();
        void AddData();
//эти еще не реализованы
        void ShowFirstItem();
        void ChangeItem();
    };

Вот .cpp файл:

#include "MyStack.h"

MyStack::MyStack()
{
    Stack *Stack1;
    Stack1->Tail = NULL;
    Stack1->Head = NULL;
}
MyStack::~MyStack()
{
    Stack *Stack1;
    while (Stack1 -> Head)
    {
        Stack1 -> Tail = Stack1 -> Head->Tail;
        delete Stack1 -> Head;
        Stack1->Head = Stack1-> Tail;
    }
}

void MyStack::AddData()
{
    Stack *Stack1=new Stack;
    Stack *temp = new Stack; //Выделяем память для нового элемента
    std::cin>>temp->data;
    temp->Tail= Stack1->Head; //Указываем, что следующий элемент это предыдущий
    Stack1->Head = temp; //Сдвигаем голову на позицию вперед
}
void MyStack::ShowData()
{
    Stack *Stack1 = new Stack;
    Stack *temp = new Stack; //Выделяем память для нового элемента
    std::cout << temp->data;
    temp->Tail = Stack1->Head; //Указываем, что следующий элемент это предыдущий
    Stack1->Head = temp; //Сдвигаем голову на позицию вперед
}

Ошибка возникает с инициализацией структуры. Пишет, что была использована неинициализированная локальная переменная Stack1.

Answer 1

Как вы думаете что происходит в этом местe?

Stack *Stack1 = new Stack; //выделили место под новую переменную, но не заинициализировали его
....
temp->Tail= Stack1->Head; //Какое значение попадет в переменную temp->Tail?
....
Answer 2

Я, честно, скопировал этот кусок с какой-то статьи и пытался адаптировать под свою программу. Там была функция в которую приходило значение наподобие fun(List *New_list).

Я пробовал писать Stack *Stack1; ,но оно даже не компилировалось. Также требовало инициализацию.

READ ALSO
Динамическая загрузка текстур в OpenGL

Динамическая загрузка текстур в OpenGL

Всем доброго времени сутокПоявилась такая проблема: Нужно динамически менять текстуру для примитива

337
VS: статическая линковка std библиотеки

VS: статическая линковка std библиотеки

Скажите можно ли все библиотеки линковать динамически (то есть с ключем /MD), а стандартную библиотеку - статически (/MT)? Статическая стандартная...

249
Указатель С++ и динамическая память

Указатель С++ и динамическая память

Доброго всем времени суток! Хочу уточнить, правильно ли я понимаю теориюИмеем такое:

265