2016-11-05 69 views
-2
struct Node{ 
    int value; 
    Node *next; 
    Node(int val) :value(val), next(nullptr){} 
}; 
class Stack 
{ 
public: 
    void push(int val); 
    int pop(); 
    bool is_empty(){ return first == nullptr; } 
private: 
    Node *first = nullptr; 
}; 

int Stack::pop(){ 
    int ret = first->value; 
    first = first->next; 
    return ret; 
} 
void Stack::push(int i){ 
    if (is_empty()){ 
     first = &Node(i); 
     return; 
    } 
    Node oldFirst = *first; 
    first = &Node(i); 
    first->next = &oldFirst; 
} 

這裏是我寫的代碼,但是,有一個問題,當我完成push()first指針未指向正確的對象。我想知道如何解決這個問題。如何建立一個C++堆棧結構

+2

解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –

+0

'std :: stack ' –

回答

3

表達&Node(i)創建臨時對象,並給你一個指針。然後臨時對象立即被破壞,留下一個指向不存在對象的指針。

您需要使用new來分配新的對象。

你也有類似的問題&oldFirst,它給你一個指向本地變量,一旦函數返回將被破壞。你需要使用一個指針變量。