C++ C++;方法返回后,链表/节点模板指针不保持NULL
如果有一个问题,有两个指针被传递到一个方法,在该方法返回之前,我用if语句确认第一个指针为NULL,然后该方法返回,控件返回main,我再次检查该指针,结果它!=空 这发生在一个while循环中,因为我试图遍历一个链表,所以它最终是一个无限循环(所以我让cin>>在它发疯之前暂停检查输出) 在主菜单输入的开关内,我有:C++ C++;方法返回后,链表/节点模板指针不保持NULL,c++,templates,pointers,null,linked-list,C++,Templates,Pointers,Null,Linked List,如果有一个问题,有两个指针被传递到一个方法,在该方法返回之前,我用if语句确认第一个指针为NULL,然后该方法返回,控件返回main,我再次检查该指针,结果它!=空 这发生在一个while循环中,因为我试图遍历一个链表,所以它最终是一个无限循环(所以我让cin>>在它发疯之前暂停检查输出) 在主菜单输入的开关内,我有: case 'D': { cout.setf(ios::left); cout << setw(20) << "Last Name" <
case 'D':
{
cout.setf(ios::left);
cout << setw(20) << "Last Name" << setw(15) << "First Name"
<< setw(10) << "Priority" << setw(10) << "Arrival Time" << endl;
NodeType<PatientType> *printer;
PatientType *patientToPrint = new PatientType();
ER.startIterate(printer, patientToPrint);
while (printer != NULL) {
PatientType::printPatient(*patientToPrint);
ER.iterate(printer, patientToPrint);
if (printer != NULL) {
cout << "printer != NULL" << endl;
} else {
cout << "printer == NULL" << endl;
}
cout << "PAST ITERATE" << endl;
int pause;
cin >> pause;
}
cout << "OUT OF LOOP";
delete printer;
delete patientToPrint;
break;
}
这似乎没有什么意义,main中的“printer”与iterate中的“item”相同,输出显示在离开iterate时它是NULL,而在紧接着到达main时,它不是NULL
在为pause变量输入int之后,它会继续循环。更重要的是,它每次也会打印出head节点的信息,我在iterate结束时也将其设置为NULL void LinkedListType::iterate(节点类型*&item,ItemType*itemToPrint)
void LinkedListType<ItemType>::iterate(NodeType<ItemType> *& item, ItemType *itemToPrint)
请看这里:
您正在按值传递指针。调用方将看不到您对传递的指针所做的更改。不确定如何修复、开始速率和迭代这两个接受指针作为参数,但我需要以某种方式更改它们?
template<class ItemType>
void LinkedListType<ItemType>::iterate(NodeType<ItemType> *item, ItemType *itemToPrint) {
NodeType<ItemType> *peek = item->next;
if (item->next == NULL) {
std::cout << "item->next == NULL" << std::endl;
}
if (peek != NULL) {
std::cout << "peek != NULL" << std::endl;
item = item->next;
*itemToPrint = item->data;
} else {
std::cout << "peek == NULL" << std::endl;
item = NULL;
itemToPrint = NULL;
if (item == NULL) {
std::cout << "item == NULL" << std::endl;
}
}
}
item->next == NULL
peek == NULL
item == NULL
printer != NULL
PAST ITERATE
void LinkedListType<ItemType>::iterate(NodeType<ItemType> *& item, ItemType *itemToPrint)