2011-12-06 34 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的問題。 –

相關問題