c++ - 指向相同类型的对象

标签 c++ visual-c++ pointers nested-class

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

从以下代码运行 Main.cpp 时,它会打印结果“15340756”。我哪里错了? Appologies 因为我对 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;
}

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

最佳答案

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

关于c++ - 指向相同类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902574/

相关文章:

c++ - 计时器与事件 : which one is preferable for Asynchronous processing?

c++ - 如何将任何化合物还原为非化合物类型

c++ - Visual C++ GC 接口(interface)如何启用它以及要包含哪个库

c - strchr 实现如何工作

c - char 指针如何与 while 循环一起使用

c++ - 是否可以像这样编写c malloc函数代码

c++ - 如何将旋转控件关联到MFC中的不同编辑框

c++ - boost::any 测试代码可以使用 Sun CC 编译,但不能使用 g++

c++ - 升级COM回调接口(interface)

c++ - 系统找不到指定的文件 Visual Studio 2015