指向相同类型的对象

Pointing to an object of the same type

本文关键字:对象 同类型      更新时间:2023-10-16

我觉得这个问题可能有点微不足道,但我根本无法理解它。我目前有一个类 Node,它试图使用指针 prevNode 指向当前节点之前出现的节点。但是,我似乎无法访问prevNode中的任何变量。

从以下代码运行 Main .cpp 时,它会打印结果"15340756"。我哪里出错了?抱歉,因为我对C++还是有点陌生。

节点.h

#include "stdafx.h"
class Node
{
public:
    Node();
    void setPrevNode(Node n);
    Node getPrevNode();
    int i;
private:
    Node *prevNode;
};

节点.cpp

#include "stdafx.h"
#include "Node.h"
Node::Node(){
    i = 0;
}
void Node::setPrevNode(Node n){
    prevNode = &n;
}
Node Node::getPrevNode(){
    return *prevNode;
}

主.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;
}
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;
}