Hello Word
我有一个节点结构如下..
typedef struct Node
{
Node* left = nullptr;
Node* right = nullptr;
string word;
int lineNumber = 0;
int count = 0;
};
这里的目标是将这个节点连接到其他节点(我知道非常基本),但我似乎错过了一些我可能会忽略的细微之处
这是我的尝试
cout << "************Testing Root Node**********************\n" << endl;
1 Node *newNode = new Node;
2 Node temp = *newNode;
3 temp.word = word;
4 temp.lineNumber = lineNumber;
5 wtree.setRoot(newNode);
6 Node temp2 = *newNode;
7 cout << "Testing temp.word = " <<temp.word << endl;
8 cout << "Testing temp2.word = " << temp2.word << endl;
9 Node *test = wtree.getRoot();
10 Node test2 = *test;
cout << "RootNode.getWord() should be CATS it is...\n\n\ " << test2.word << endl;
cout << "************End of Root Node Test******************\n\n\n\n" << endl;
我的分析
我认为2 - 4行是错误的,但我不知道如何解决它/
My output is this
Testing temp.word = cats
Testing temp2.word = _____(blank)
RootNode.getWord() should be CATS it is... _______ (blank)
此输出告诉我newNode根本没有被更改。所以我的temp.word =字不是我所期望的行为。
有人可以告诉我应该如何妥善处理这种情况? 提前致谢
如果我不清楚,请告诉我,我很乐意提供更多详情
我也尝试了
*newNode.word = word
但这给了我编译问题
加分问题
new运算符是否与malloc做同样的事情?
我对C ++很新,但我相信它确实
答案 0 :(得分:1)
temp
是newNode
的副本。因此,当您为其指定值时,您不会影响newNode
。
如果要直接设置newNode,请使用以下内容:
newNode->word = word;
您不需要所有这些副本(例如temp2
),只需使用->
从指向结构或类的指针访问成员变量。
编辑:奖金问题:
new
与malloc
类似。它为对象分配内存。但是,new
也调用对象的构造函数,它允许对象自己初始化。
答案 1 :(得分:0)
节点temp = * newNode; //这一行是创建一个新对象而不是指向newNode
的对象如果要在对temp进行更改时反映对newNode的更改,可以使用reference
Node&amp; temp = * newNode;
通过这种方式,temp是newNode的别名而不是全新的对象。