0

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

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

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

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

亚当

4

3 回答 3

1

不要绕过基本的数据结构。

你的堆栈代表了一些东西,可能是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();
}
于 2011-12-06T22:17:44.697 回答
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);
于 2011-12-06T21:10:17.450 回答
0

确保你做一个

#include <stack>

另外要么做一个

using namespace std;

或一个

std::stack<int> items;

在头文件中。

于 2011-12-06T21:29:48.010 回答