簡體   English   中英

傳遞引用與指針

[英]Passing in References vs. Pointers

newTemp傳遞給setEmergencyContact()時出現錯誤。 我得到的錯誤是關於:

temp->Contact::setEmergencyContact(newTemp);

“錯誤:沒有匹配的函數調用'Contact :: setEmergencyContact(*&Contact)'”

所以我的問題是:如果必須使用指針創建對象,那么如何將對象傳遞給使用引用而不是指針的函數?

 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建議取消引用傳遞的指針。

我看到您正在使用很多new和Delete,我不禁要推薦智能指針,並盡量減少使用new和Delete。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM