2011-12-06 33 views
0

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

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

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

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

亚当

+0

这个堆栈对象是你类的(私有)成员吗? – kol

+1

任何示例代码如何试图做到这一点以及编译器抱怨什么都会很有帮助。 –

+0

@kol暂时还没有成员。我试着在头文件中声明它是一个受保护的成员:stack items;但它不起作用,它给编译错误“堆栈不是一种类型” – adamjmarkham

回答

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

好吧,让我们假设你正在使用一个std ::堆栈。

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); 
+0

考虑在std :: stack之前使用static,它告诉编译器在每个实例中使用_same_堆栈。 – EGOrecords

+1

@EGOrecords,将静态堆栈的糟糕用法看作是一个便宜的全局变量。 –

0

要确保你做

#include <stack> 

,另外无论是做

using namespace std; 
在头文件

std::stack<int> items; 

+0

建议在头文件中使用'using namespace std;'不是很好的建议! –

+0

我想说绝对要看。无论如何它应该解决OP的问题。 –

相关问题