传入引用与指针

Passing in References vs. Pointers

本文关键字:指针 引用      更新时间:2023-10-16

当我传入newTemp设置EmergencyContact()时,我收到错误。我得到的错误是关于:

temp->Contact::setEmergencyContact(newTemp);

"错误:没有匹配的函数调用'联系人::设置紧急联系人(*&联系人)'"

所以我的问题是:如果你必须使用指针创建一个对象,你如何将对象传递给使用引用而不是指针的函数?

 Contact generateRandomContact(){
        // The name will be created with
        // generateRandomName() and phone number will be created with
        // generateRandomNumber(). Using the above random function,
        // with 50% probability assign a new Contact as the emergencyContact
        // of the one just generated. Otherwise leave it NULL (default).
        // Then return this Contact.
Contact* temp = new Contact;
temp->Contact::changeName(generateRandomName());
temp->Contact::changeNumber(generateRandomNumber());
    if(myrand(11) % 2 != 0){
      Contact* newTemp = new Contact;
      temp->Contact::setEmergencyContact(newTemp);
   }
return *temp;  
}

紧急联络功能:

void Contact::setEmergencyContact(Contact & _emergencyContact){
Contact* changeEmergencys = new Contact;
changeEmergencys = emergencyContact->getEmergencyContact();
}

取消引用它:

temp->setEmergencyContact(*newTemp)
void Contact::setEmergencyContact(Contact & _emergencyContact)

应该只是

void Contact::setEmergencyContact(Contact * _emergencyContact)

使用您的代码,仍然使用 -> 而不是 .

但是,如果要修改指针本身,可以使用

void Contact::setEmergencyContact(Contact* & _emergencyContact) {
    Contact* changeEmergencys = new Contact;
    changeEmergencys = _emergencyContact->getEmergencyContact();
}

请注意,如果取消引用它,则必须使用 . 而不是->

void Contact::setEmergencyContact(Contact & _emergencyContact) {
    Contact* changeEmergencys = new Contact;
    changeEmergencys = _emergencyContact.getEmergencyContact();
}

编辑函数以改为使用指针:

void Contact::setEmergencyContact(Contact * _emergencyContact)

或者按照 zmbq 的建议取消引用传递指针。

看到你正在使用很多新的和删除我情不自禁地推荐智能指针并尽量减少使用新的和删除。