Привет, 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 = word не выполняет ожидаемое поведение.
Может ли кто-нибудь сказать мне, как я должен правильно справляться с этой ситуацией? заранее спасибо
Пожалуйста, дайте мне знать, если я не был ясен, и я с удовольствием предоставил более подробную информацию
Я также пробовал
*newNode.word = word
Но это дало мне проблемы с компиляцией
Бонусный вопрос
Выполняет ли новый оператор то же самое, что и malloc?
Я новичок в C++, но я считаю, что это
temp
- это копия newNode
. Поэтому, когда вы присваиваете ему значения, вы не newNode
.
Если вы хотите напрямую установить newNode, используйте следующее:
newNode->word = word;
Вам не нужны все эти копии (например, temp2
), просто используйте ->
для доступа к переменным-членам из указателей в структуры или классы.
Изменение: Бонусный вопрос: new
похоже на malloc
. Он выделяет память для объекта. Однако new
также вызывает конструктор объекта, который позволяет объектам инициализировать себя.
Node & temp = *newNode
способ), изменение объявлений на Node & temp = *newNode
, Node & temp2 = *newNode
и Node & test2 = *test
также привело бы к тому, что вы были ожидая.
Node temp = * newNode; // Эта строка создает новый объект и не указывает на объект newNode
Если вы хотите отразить свои изменения в newNode, когда вы вносите изменения в temp, вы можете использовать ссылку
Node & temp = * newNode;
Таким образом, temp является псевдонимом newNode вместо совершенно нового объекта.
This output tells me that the newNode is not being changed at all.
Это потому, что вы нигде не изменяетеnewNode
в своем коде,temp
иtemp2
инициализируются как копияnewNode
, изменение членовtemp
илиtemp2
неnewNode
. На ваш «бонусный» несвязанный вопрос есть несколько ответов.