可以通过类的所有成员函数访问堆栈

时间:2011-12-06 21:07:40

标签: c++ class stack member-functions

我希望类的所有成员函数都能访问同一个堆栈。每个成员函数都会将数据推送到堆栈并从堆栈中弹出数据。

我很难宣布堆栈。我有一个cpp文件和一个头文件,它不会让我在头文件中声明一个堆栈。有没有人有一个如何做到这一点的例子?

我需要使用堆栈作为LIFO数据结构更有意义,因为我只需要访问放在堆栈上的最后一项。

我尝试在头文件中将其声明为stack<int> items;的受保护成员,但得到编译错误“堆栈没有命名类型”。

亚当

3 个答案:

答案 0 :(得分:1)

不要传递基本数据结构。

你的筹码代表了一些东西,可能是三明治店中的Orders筹码堆,或者是一堆Pancakes呈现在光荣的5D中。根据需要创建类型为PancakesOrders的对象,并将引用传递给需要了解它的对象。

// 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();
}

答案 1 :(得分:0)

好的,我们假设你正在使用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);

答案 2 :(得分:0)

确保你做了

#include <stack>

另外要么做一个

using namespace std;

std::stack<int> items;

在头文件中。