我希望类的所有成员函数都能访问同一个堆栈。每个成员函数都会将数据推送到堆栈并从堆栈中弹出数据。
我很难宣布堆栈。我有一个cpp文件和一个头文件,它不会让我在头文件中声明一个堆栈。有没有人有一个如何做到这一点的例子?
我需要使用堆栈作为LIFO数据结构更有意义,因为我只需要访问放在堆栈上的最后一项。
我尝试在头文件中将其声明为stack<int> items;
的受保护成员,但得到编译错误“堆栈没有命名类型”。
亚当
答案 0 :(得分: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();
}
答案 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;
在头文件中。