2011-03-30 77 views
0

我试图创建一个指向节点的指针向量,其中每个节点存储一个指向列表中前一个节点的指针。试图创建一个指向对象内的先前对象的指针

我做了一个小测试程序,看我是否可以访问前一个对象中的变量gscore给我所调用的对象。

#include <iostream> 
#include <vector> 

using namespace std; 

struct Node 
{ 
    Node(int gscore1) 
    { 
     gscore = gscore1; 
    } 

    Node *previous; 
    int gscore; 
}; 

int main() 
{ 
    std::vector<Node*> nodeVec; 

    Node *tempnode; 
    tempnode = new Node(10); 
    Node *tempnode2; 
    tempnode = new Node(11); 

    nodeVec.push_back(tempnode); 
    nodeVec.push_back(tempnode2); 

    nodeVec[1]->previous = tempnode; 

    cout << nodeVec[1]->previous->gscore << endl; 

    return 0; 
} 

但是这会导致崩溃。什么是正确的方法来做到这一点?

+0

在Node构造函数中,将以前初始化为0是一个好主意。 – xcramps 2011-03-30 01:09:36

回答

3

您从不初始化tempnode2。你初始化tempnode两次。

int main() 
{ 
    std::vector<Node*> nodeVec; 

    Node *tempnode; 
    tempnode = new Node(10); 
    Node *tempnode2; 
    tempnode2 = new Node(11); // <<---- HERE 

    nodeVec.push_back(tempnode); 
    nodeVec.push_back(tempnode2); 

    nodeVec[1]->previous = tempnode; 

    cout << nodeVec[1]->previous->gscore << endl; 

    return 0; 
} 
+0

我无法相信在盯着它看了这么久之后错过了,谢谢。 – bq54 2011-03-30 00:52:29

+0

@ bq54:这发生在我身上很多次 – GWW 2011-03-30 01:03:46

0

看起来像打字错误。 main()中的第三行应该是tempnode2而不是tempnode。