如何在 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;
}
注意:ptr
是nullptr
,所以nxt
也是nullptr
。
所以你崩溃了...
使 ptr
不为空,并修复你的 pop 函数错误,这样就可以了。
我正在尝试使用嵌套结构执行堆栈函数。 但是我在初始化堆栈时遇到问题。
是下面代码中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;
}
注意:ptr
是nullptr
,所以nxt
也是nullptr
。
所以你崩溃了...
使 ptr
不为空,并修复你的 pop 函数错误,这样就可以了。