传入参考文献与指针

时间:2015-06-13 17:07:03

标签: c++

我将 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();
}

3 个答案:

答案 0 :(得分:0)

取消引用它:

temp->setEmergencyContact(*newTemp)

答案 1 :(得分:0)

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();
}

答案 2 :(得分:0)

编辑函数以取代指针:

void Contact::setEmergencyContact(Contact * _emergencyContact)

或者以zmbq建议取消引用传递指针。

我看到你正在使用很多新的删除我不能帮助自己,但推荐智能指针并尽量减少使用new和delete。