C++ 我可以在c++;
我对结构和类有问题。现在我在结构内部定义类,然后创建结构作为节点,并在队列中推送节点。问题是,当我弹出队列时,我创建了接收pop节点的节点,但节点中的类是一个新类,与推之前不同。按代码执行C++ 我可以在c++;,c++,C++,我对结构和类有问题。现在我在结构内部定义类,然后创建结构作为节点,并在队列中推送节点。问题是,当我弹出队列时,我创建了接收pop节点的节点,但节点中的类是一个新类,与推之前不同。按代码执行 struct queueNode { Puzzle puzzle; queueNode *next; short lastMove; }; class Puzzle { private : short fiel
struct queueNode {
Puzzle puzzle;
queueNode *next;
short lastMove;
};
class Puzzle {
private :
short field[4][4];
short posBlankI;
short posBlankJ;
public :
Puzzle();
bool isFinish();
void print();
void create();
}
class Queue {
private:
queueNode *first, *last;
public:
Queue(){
first = new queueNode;
first->next = NULL;
last = first;
}
~Queue() { delete first; }
bool isEmpty(){ return (first->next == NULL); }
void push(queueNode *aux){
last->next = aux;
last = aux;
}
queueNode pop(){
queueNode *aux = first;
first = first->next;
return *aux;
}
};
//global variable
Queue *q = new Queue();
int main(){
queueNode *root = new queueNode;
root->puzzle.create();
q->push(root);
q->pop().puzzle.print();
return 0;
}
推送会将节点添加到内部列表的末尾。它不是空的
标准库有队列、列表和各种漂亮的容器。使用其中之一。推送将节点添加到内部列表的末尾。它不是空的
标准库有队列、列表和各种漂亮的容器。使用其中之一。是的,可以在结构中定义类。代码示例不会这样做。是的,您可以在结构中定义一个类。代码示例不会执行此操作。pop返回一个对象,而不是指针。将创建一个新的queueNode,并从*aux复制其内容。您应该修改pop以返回queueNode的指针。pop返回的对象不是指针。将创建一个新的queueNode,并从*aux复制其内容。您应该修改pop以返回queueNode的指针。该问题与作为结构成员的类无关
Queue
的构造函数创建一个包含1个空白节点的队列q->push(root)
在末尾插入第二个节点q->pop()
返回第一个(空白)节点的副本,而不是预期的第二个。问题与作为结构成员的类无关
Queue
的构造函数创建一个包含1个空白节点的队列q->push(root)
在末尾插入第二个节点q->pop()
返回第一个(空白)节点的副本,而不是预期的第二个。创建队列时,它使用new创建一个queueNode,并默认将其放入队列中。因此,当您调用pop()时,它将返回您没有使用create()配置的默认节点
我对您的代码进行了一些修改,并让它编译和运行,以说明我在上面提出的观点。(注意:它是在VS2010上编译的,如果您使用其他东西,请删除#包括“stdafx.h”)
希望这能帮助你准确地看到你在做什么
我不建议在您关心的实现中使用下面的代码。仅将其用作学习工具。我建议将类声明分离为单独的头文件,将实现分离为单独的CPP文件。它有助于组织事情
输出:
0000
0000
0000
0000
1111
1111
1111
1111
代码:
#包括“stdafx.h”
#包括
班级难题{
私人:
短域[4][4];
短posBlankI;
短posj;
公众:
拼图()
{
对于(inti=0;ipop().puzzle.print();
q->pop().puzzle.print();
系统(“暂停”);
返回0;
}
当您创建队列时,它会使用new创建一个queueNode,并默认将其放入队列中。因此,当您调用pop()时,它会返回您没有使用create()配置的默认节点
我对您的代码进行了一些修改,并让它编译和运行,以说明我在上面提出的观点。(注意:它是在VS2010上编译的,如果您使用其他东西,请删除#包括“stdafx.h”)
希望这能帮助你准确地看到你在做什么
我不建议在您关心的实现中使用下面的代码。仅将其用作学习工具。我建议将类声明分离为单独的头文件,并将实现分离为单独的CPP文件。这有助于组织工作
输出:
0000
0000
0000
0000
1111
1111
1111
1111
代码:
#包括“stdafx.h”
#包括
班级难题{
私人:
短域[4][4];
短posBlankI;
短posj;
公众:
拼图()
{
对于(inti=0;ipop().puzzle.print();
q->pop().puzzle.print();
系统(“暂停”);
返回0;
}
这显然不是有问题的代码,因为这段代码不会编译。可以猜测代码的问题是什么,但是如果你发布编译、运行并显示问题的真实代码,你会得到更好的答案。这显然不是有问题的代码,因为这段代码不会编译。可能是p猜测代码的问题是可能的,但是如果您发布编译、运行并显示问题的真实代码,您将得到更好的答案。