如何在 C++ 中初始化嵌套结构

How to initialize nested structures in C++

我正在尝试使用嵌套结构执行堆栈函数。 但是我在初始化堆栈时遇到问题。

是下面代码中LinkList结构初始化函数的问题

请帮助并让我知道如何完整地运行这段代码。

提前致谢

代码:

#include<iostream>

using namespace std;

class stack{
    struct ch;
    ch * ptr;

    public:
        void initialize();
        void push(int *);
        int* pop();
        int* peek();
};


struct stack::ch{
    struct LinkList{
        int * data;
        LinkList * next;
        void initialize(int* dat, ch* nxt);
    }*head;
};

/*this is where i am facing problem*/
void stack::ch::LinkList::initialize(int *dat, ch *nxt){
        data = dat;
        if(nxt->head)   //as i cannot access head of nxt,so code is crashing 
        next = nxt->head;
        else
            next = 0;
    }

    void stack::initialize()
    {
        ptr = 0;

    }

    void stack::push(int *dat)
    {
        ch::LinkList* newNode = new ch::LinkList;
        newNode->initialize(dat,ptr);
        ptr->head = newNode;    
    }

    int* stack::pop()
    {
        if(ptr == 0)
            return 0;
        ch::LinkList* oldHead = ptr->head;
        ptr->head = ptr->head->next;
        int * dat = oldHead->data;
        delete oldHead;
        return dat;
    }

    int* stack::peek()
    {
        if(ptr->head == 0)
            return 0;
        return ptr->head->data;
    }

    int main()
    {
        stack obj;
        obj.initialize();
        int a = 10;
        int b  = 11;
        int c  = 12;
        int d  = 13;
        obj.push(&a);
        obj.push(&b);
        obj.push(&c);
        obj.push(&d);

        int *f;
        while((f = obj.pop())!=0)
        {
            cout<<*(obj.peek())<<endl;
            //obj.pop();
        }           

return 0;
}

你应该自己调试你的代码。

void stack::push(int *dat)
{
    ch::LinkList* newNode = new ch::LinkList;
    newNode->initialize(dat,ptr);
    ptr->head = newNode;    
}

void stack::ch::LinkList::initialize(int *dat, ch *nxt){
    data = dat;
    if(nxt->head)    
        next = nxt->head;
    else
        next = 0;
}

注意:ptrnullptr,所以nxt也是nullptr。 所以你崩溃了...
使 ptr 不为空,并修复你的 pop 函数错误,这样就可以了。