2012-06-05 108 views
2

我覺得這個問題可能有點微不足道,但我根本無法將頭圍住它。我目前有一個類Node,它試圖使用prevNode指針指向當前節點之前發生什麼節點。不過,我似乎無法訪問prevNode內的任何變量。指向同一類型的對象

從下面的代碼運行Main.cpp時,它打印結果'15340756'。我哪裏錯了?作爲Im的Appologies對於C++來說還是有點新的。

Node.h

​​

Node.cpp

#include "stdafx.h" 
#include "Node.h" 

Node::Node(){ 
    i = 0; 
} 

void Node::setPrevNode(Node n){ 
    prevNode = &n; 
} 

Node Node::getPrevNode(){ 
    return *prevNode; 
} 

Main.cpp的

#include "stdafx.h" 
#include "Node.h" 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    Node nodes[] = {Node(), Node()}; 

    nodes[0].i = 1; 
    nodes[1].setPrevNode(nodes[0]); 
    printf("%i", nodes[1].getPrevNode().i); 
    while(true){ 

    } 
    return 0; 
} 

回答

7
void setPrevNode(Node n); 

這裏setPrevNode宣佈採取節點的副本作爲參數傳遞,並指向這樣的節點。函數返回後,指向節點不再存在,你得到的是未定義的行爲。

你需要的是採取Node無論是作爲一個參考或者一個指針來代替:

void setPrevNode(Node& n) 
{ 
    prevNode = &n; 
} 

void setPrevNode(Node* n) 
{ 
    prevNode = n; 
} 

在同一行,getPrevNode定義爲返回前一個節點的副本。你肯定想在這裏返回一個參考,而不是,但你也可以返回一個指針:

Node& getPrevNode() 
{ 
    return *prevNode; 
} 

Node* getPrevNode() 
{ 
    return prevNode; 
} 
+0

我也想補充相應的'getPrevNode'返回一個指向'Node'展現推論到' setPrevNode'方法獲取指針。這個答案很好地顯示了按值傳遞,引用和指針之間的差異。 – Kaiged

相關問題