C++ 如何构建C++;堆栈结构

C++ 如何构建C++;堆栈结构,c++,stack,C++,Stack,下面是我如何编写代码的,但是,当我完成push()时,first的指针没有指向正确的对象。我想知道如何解决这个问题。表达式&Node(I)创建一个临时对象并给您一个指向它的指针。然后临时对象立即被销毁,留下一个指向不存在对象的指针 您需要使用new来分配新对象 &oldFirst也有类似的问题,它给您一个指向局部变量的指针,该变量将在函数返回后被销毁。您需要使用指针变量。解决此类问题的正确工具是调试器。在询问堆栈溢出之前,应该逐行检查代码。如需更多帮助,请阅读。至少,您应该[编辑]您的问题,以包

下面是我如何编写代码的,但是,当我完成
push()
时,
first
的指针没有指向正确的对象。我想知道如何解决这个问题。

表达式
&Node(I)
创建一个临时对象并给您一个指向它的指针。然后临时对象立即被销毁,留下一个指向不存在对象的指针

您需要使用
new
来分配新对象


&oldFirst
也有类似的问题,它给您一个指向局部变量的指针,该变量将在函数返回后被销毁。您需要使用指针变量。

解决此类问题的正确工具是调试器。在询问堆栈溢出之前,应该逐行检查代码。如需更多帮助,请阅读。至少,您应该[编辑]您的问题,以包括一个重现您的问题的示例,以及您在调试器中所做的观察。
std::stack
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;
}