如何将Node指针添加到Vector指针?

时间:2014-11-11 00:57:08

标签: c++ pointers vector nodes

我正在尝试创建一个由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类是给我的,但是我做的其他所有东西,所以基本上任何一个都可以改变。在此先感谢您的帮助。

1 个答案:

答案 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);

这些是上述代码中最明显的问题,但可能还有更多。