lon*_*rts 2 c++ pointers nested-class visual-c++
我觉得这个问题可能有点微不足道,但我根本无法绕过它.我目前有一个类Node,它试图使用指针prevNode指向当前节点之前发生的节点.但是我似乎无法访问prevNode中的任何变量.
从以下代码运行Main.cpp时,它将打印结果'15340756'.我哪里错了?作为我仍然有点新的C++的应用.
Node.h
#include "stdafx.h"
class Node
{
public:
Node();
void setPrevNode(Node n);
Node getPrevNode();
int i;
private:
Node *prevNode;
};
Run Code Online (Sandbox Code Playgroud)
Node.cpp
#include "stdafx.h"
#include "Node.h"
Node::Node(){
i = 0;
}
void Node::setPrevNode(Node n){
prevNode = &n;
}
Node Node::getPrevNode(){
return *prevNode;
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
void setPrevNode(Node n);
Run Code Online (Sandbox Code Playgroud)
setPrevNode声明这里将获取作为参数传递的节点的副本,并指向此类节点.函数返回后,指向的节点不再存在,您获得的是未定义的行为.
您想要的是将其中Node任何一个作为引用或指针:
void setPrevNode(Node& n)
{
prevNode = &n;
}
void setPrevNode(Node* n)
{
prevNode = n;
}
Run Code Online (Sandbox Code Playgroud)
在同一行上,getPrevNode定义为返回上一个节点的副本.你当然希望在这里返回一个引用,尽管你也可以返回一个指针:
Node& getPrevNode()
{
return *prevNode;
}
Node* getPrevNode()
{
return prevNode;
}
Run Code Online (Sandbox Code Playgroud)