2013-09-25 41 views
0

這裏是一塊我有故障碼:麻煩與STL堆疊和頂部()函數

if (stack_flag == true) { 
    bool hangar = false; 
    while (hangar == false) { 
     unsigned int index = s_move.top(); 
     unsigned int edge = map[index].get_which_edge(); 
     char current = map[index].get_char(); 
     s_move.pop(); 

使用堆棧容器,如果我的程序接受命令行輸入,指出這樣做;這就是堆棧標誌。這是我的循環的第一對夫婦線。堆棧使用一個值進行初始化。我遇到的問題是我需要獲取堆棧頂部元素的值,並且我還需要將該元素從堆棧中彈出,但是top()函數會返回對頂部值的引用。當我彈出該值時,引用不再有用。有沒有另一種方法從堆疊中獲取價值,同時立即將其彈出?我的錯誤是:s_move was not declared in this scope.

+0

s_move未在此範圍內聲明意味着它說:您沒有一個名爲's_move'的堆棧或其他任何可以訪問此代碼的東西。這可能是一個簡單的錯字,或者它可能意味着你試圖從一個完全不同的函數訪問一個局部變量,或者這可能意味着你忘記了#include東西,或者......但不管它是什麼,其他所有東西在你解決這個問題之前是無關緊要的。 – abarnert

+0

s_move在比循環更廣泛的範圍內聲明,我也擁有所有的包含。也沒有錯別字。我的代碼的其餘部分也使用s_move,沒有錯誤 – user2817389

+0

嗯,這個問題顯然涉及你向我們展示的代碼之外的代碼,如果你沒有顯示代碼,沒有人可以爲你進行調試。 – abarnert

回答

1

這將很好地工作:

unsigned int index = s_move.top(); 

因爲index是L值。使用top()返回的引用進行復制。
一旦你有一個副本彈出頂部將不會影響索引。

另一個問題:

我的錯誤是:s_move沒有在這個範圍內聲明。

是因爲代碼不知道對象s_move
也許你會忘記包含適當的頭文件。

+0

好吧,知道這行代碼是好的。但我仍然無法弄清楚錯誤。我有所有必要的頭文件.. – user2817389