2016-05-04 82 views
-1

問題是,我沒有得到預期的輸出。我有一個Node的類,它具有稱爲neigbours的指針向量。我想把對象neigbour放入向量中。向量指針添加和訪問

Node current = Node(1, 1, street , 2, 2); 
Node neighbour = Node(2, 2); 
neighbour.instreets.push_back(Street(1, 1, street, 2, 2)); 
nodes.push_back(neighbour); 

current.neighours.push_back(&nodes.at(0)); 
nodes.push_back(current); 

然後我想訪問它打印出來。

cout << nodes[1].x << " " << nodes[1].y << endl; 
cout << "- " << nodes[0].outstreets[0].name << endl; 
cout << "ends " << nodes[1].neighours.at(0)->x << " " << nodes[1].neighours[0]->y << endl; 

但我得到一些隨機數,而不是爲鄰居協調。我是否以錯誤的方式訪問它們?

期望輸出是

1 1 
- street 
ends 2 2 

編輯: 節點是節點對象的矢量。

回答

1

將元素添加到nodes向量後,可以重新分配其內存。這意味着它的元素被移動到內存中的不同位置,並且指向它們的指針將失效。

特別是,你已經採取&nodes.at(0)地址是無效的執行nodes.push_back(current);

有多種方式來解決它後了,但最簡單的是使vectornodes一個deque代替。 Deque不會重新分配內存,所以你的代碼會正常工作。

+0

所以我不正確地添加鄰居到矢量? –

+1

問題是你正在使用一個指針指向vector''節點擁有的內存。請參閱編輯答案以瞭解如何解決此問題。 – rburny

+0

非常感謝。這效果更好。 –