我一直在关注二元树上的一行教程,而且我对模板和抽象类仍然很陌生。
我声明了3个指向节点struct,* current,* trail和* newNode的指针,然后分配它们。
当然,我在声明时尝试将这三个指针设置为 nullptr ,但它会在运行时断开该行上的程序。
我得到的错误是:
"潜在的未初始化的本地指针变量' trail'使用"
和
未初始化的局部变量" newNode"使用。
功能:
template<class elemType>
void searchTree<elemType>::insert(const elemType& item)
{
nodeType<elemType> *current, *trail, *newNode;
newNode->info = item; // Cant assign, first error
newNode->leftLink = NULL;
newNode->rightLink = NULL;
if (root == NULL)
root = newNode;
else
{
current = root;
while (current != NULL)
{
trail = current;
if (current->info == item)
{
cout << "Item is already in tree, no duplicates." << endl;
return;
}
else if (current->info > item)
current = current->leftLink;
else
current = current->rightLink;
}
if (trail->info > item) // second error
trail->leftLink = newNode;
else
trail->rightLink = newNode;
}
}
我已经在这里:Potentially uninitialized local pointer variable 'node' used. C++
我尝试了包括
在内的所有建议#pragma warning(disable : 4703)
但指针仍然没有初始化,它仍然在那条线上打破。
任何建议(或指针)都将不胜感激。
答案 0 :(得分:1)
我认为
是指针的新手nodeType<elemType> *current, *trail, *newNode;
此时newNode没有任何价值,它“点”无处可见
newNode->info = item;
此时您使用newNode的无意义值。这是您的编译器警告的内容。
你需要做的是这样的事情
nodeType<elemType> *current, *trail, *newNode;
newNode = new nodeType<elemType>(); // make newNode point at a new node
newNode->info = item;
newNode->leftLink = NULL;
newNode->rightLink = NULL;
第二个警告是虚假的。编译器担心你永远不会执行while循环的主体,因此可能无法初始化跟踪。但是你编写代码的方式while循环总是至少执行一次。要删除警告,您可以将while循环重写为do ... while循环。
do
{
trail = current;
if (current->info == item)
{
cout << "Item is already in tree, no duplicates." << endl;
return;
}
else if (current->info > item)
current = current->leftLink;
else
current = current->rightLink;
}
while (current != NULL);
这样编译器就会知道正在初始化路径。