gpt4 book ai didi

c++ - 指向节点的指针不更新节点属性

转载 作者:行者123 更新时间:2023-11-28 00:18:15 25 4
gpt4 key购买 nike

我有一个 BinaryTreeNode 类,其中有两个 child Left 和 Right。

我想实例化一个节点 N,给它两个子节点 L 和 R,然后更新这些子节点的属性,以便在我稍后通过 N 访问它们时反射(reflect)这些属性:N。 getLeft().getName() 应与 L.getName() 相同。

我拥有的是 L 和 R 正确更新,但是当通过 N 访问时,它们没有。

我做错了什么?

这是类声明:

#include <iostream>
#include <string>

class BinaryTreeNode
{
public:
BinaryTreeNode();
BinaryTreeNode(std::string newName);
BinaryTreeNode(std::string newName, BinaryTreeNode Left, BinaryTreeNode Right);
~BinaryTreeNode();

BinaryTreeNode getLeft();
BinaryTreeNode getRight();
int getValue();
std::string getName();
void setLeft(BinaryTreeNode newLeft);
void setRight(BinaryTreeNode newRight);
void setValue(int newValue);
void setName(std::string newName);

private:
int value;
std::string name;
BinaryTreeNode* Left;
BinaryTreeNode* Right;
};

主要内容:

#include "tree.h"

int main( int argc, char** argv ) {
BinaryTreeNode N("N"), L, R;
BinaryTreeNode *Lptr, *Rptr;
Lptr = &L;
Rptr = &R;
N.setValue(45);
N.setLeft(L);
N.setRight(R);
Lptr->setName("L");
Rptr->setName("r");
Lptr->setValue(34);

std::cout << "Name of N:" << N.getName() << std::endl; //N
std::cout << "Name of L:" << L.getName() << std::endl; //L
std::cout << "Name of R:" << R.getName() << std::endl; //r

std::cout << "value of N: " << N.getValue() << std::endl; //45
std::cout << "name of N left: " << N.getLeft().getName() << std::endl; //nothing, instead of "L"
std::cout << "name of L: " << L.getName() << std::endl; //L
std::cout << "value of N left: " << N.getLeft().getValue() << std::endl; //0, instead of 34
std::cout << "value of L: " << L.getValue() << std::endl; //34
return 0;

最佳答案

你有一堆乱七八糟的指针和按值复制:

N.setValue(45);
N.setLeft(L); //This create a New instance of L, copies the original by value, and then sets it as the left node, eg, its a new node
N.setRight(R); // The same

在这种情况下你应该传递指针:

void setLeft(BinaryTreeNode * newLeft);
void setRight(BinaryTreeNode * newRight);

这样,当您编辑节点时,它们将被更改。否则您只需创建新实例。

关于c++ - 指向节点的指针不更新节点属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28904445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com