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