Стек доступен для всех функций-членов класса - PullRequest
0 голосов
/ 07 декабря 2011

Я хочу, чтобы все функции-члены класса имели доступ к одному и тому же стеку.Каждая функция-член помещает данные в стек и извлекает данные из стека.

Мне трудно объявить стек.У меня есть файл cpp и файл заголовка, он не позволяет мне объявить стек в файле заголовка.У кого-нибудь есть пример того, как это можно сделать?

Мне нужно использовать стек, поскольку структура данных LIFO имеет больше смысла, поскольку мне нужен только доступ к последнему элементу, помещенному в стек.1006 * Я попытался объявить его в заголовочном файле как защищенный элемент с stack<int> items;, но получил ошибку компиляции "стек не называет тип".

Адам

Ответы [ 3 ]

1 голос
/ 07 декабря 2011

Не передавайте базовые структуры данных.

Ваш стек представляет что-то, возможно, стек Orders в сэндвич-магазине, или стек Pancakes, отображаемый в великолепном 5D Создайте объект типа Pancakes или Orders в зависимости от ситуации и передайте ссылку на объекты, которые должны знать об этом.

// pancakes.h
#include <stack>    
class Pancake;

class Pancakes
{
public:
    void addPancake(const Pancake& pancake);
    Pancake& top() const;
    void pop();
private:
    std::stack<Pancake> m_pancakes;
};

// pancakes.cpp
#include "pancakes.h"
#include "pancake.h"

void Pancakes::addPancake(const Pancake& pancake)
{
    m_pancakes.push(pancake);
}

Pancake& Pancakes::top() const
{
    return m_pancakes.top();
}

void Pancakes::pop()
{
    m_pancakes.pop();
}
0 голосов
/ 07 декабря 2011

Убедитесь, что вы делаете

#include <stack>

и дополнительно либо

using namespace std;

, либо

std::stack<int> items;

в заголовочном файле.

0 голосов
/ 07 декабря 2011

Хорошо, давайте предположим, что вы используете std :: stack.

class MyClass
{
private:
    std::stack<int>& myStack_;
public:

    MyClass(std::stack<int>& stack) : myStack_(stack) { };
}; // eo MyClass

Просто передайте ссылку на стек каждый раз, когда создаете экземпляр MyClass.Это также позволяет избежать синглетонов:

std::stack<int> globalStack;
MyClass class1(globalStack);
MyClass class2(globalStack);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...