2011-03-30 96 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。