2012-06-05 66 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

相关问题