我正在尝试创建一个由Nodes对象组成的迷宫。每个Node对象都有一个成员变量
Node *attachedNodes[4]
,它基本上包含所有附加的节点,这些节点稍后会告诉程序它在进行广度优先搜索时的选项。每当我认为我理解指针时,就会出现另一个这样的问题,我会再次感到失落。特别是因为它工作正常(据我所知),直到我改变了一些我认为无关的东西。无论如何,这里是问题所在:
My Node对象看起来像这样
class Node {
public:
...
void attachNewNode(Node *newNode, int index);
...
private:
...
Node *attachedNodes[4];
...
};
我附加节点的功能如下:
void Node::attachNewNode(Node *newNode, int index) {
*attachedNodes[index] = *newNode;
}
最后,调用attachNewNode函数的另一个函数的部分如下所示:
int mazeIndex = 0;
while (inStream.peek() != EOF) {
int count = 0;
Node n;
Node m;
...
if (System::isNode(name2)) {
m = System::findNode(name2);
}
else {
m = Node(name2);
maze[mazeIndex] = m;
mazeIndex++;
}
Node *temp;
*temp = m;
n.attachNewNode(temp, count); //The error usually happens here, but I added the rest of the code because through debugging it is only consistently in this whole area.
count++;
}
n.setNumberUsed(count);
}
很抱歉这有点冗长,但我一直在搜索这部分,我试图弄清楚哪里出了问题,但是如果有人对指针有更多的了解会更好就此事提出意见。 Node类是给我的,但是我做的其他所有东西,所以基本上任何一个都可以改变。在此先感谢您的帮助。
答案 0 :(得分:1)
您的课程包含属性:
Node *attachedNodes[4];
上面说的attachNodes是一个包含4个节点指针的数组。在你的attachNewNode函数中,你可以:
*attachedNodes[index] = *newNode;
这意味着您正在尝试将newNode的值(作为*取消引用指针)分配给attachmentNodes [index]下元素的值。你可能想要的是:
attachedNodes[index] = newNode;
这意味着你只想在地址数组中存储地址(因为指针只是一个地址到内存中的某个地方)。
此处还有另一个错误:
Node *temp;
*temp = m;
n.attachNewNode(temp, count);
同样,您有兴趣存储节点 m 的地址。为此,您需要获得上述地址:
Node *temp;
temp = &m;
n.attachNewNode(temp, count);
这些是上述代码中最明显的问题,但可能还有更多。