Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;方法返回后,链表/节点模板指针不保持NULL_C++_Templates_Pointers_Null_Linked List - Fatal编程技术网

C++ C++;方法返回后,链表/节点模板指针不保持NULL

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" <

如果有一个问题,有两个指针被传递到一个方法,在该方法返回之前,我用if语句确认第一个指针为NULL,然后该方法返回,控件返回main,我再次检查该指针,结果它!=空

这发生在一个while循环中,因为我试图遍历一个链表,所以它最终是一个无限循环(所以我让cin>>在它发疯之前暂停检查输出)

在主菜单输入的开关内,我有:

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)