C++ 传入引用与指针
将newTemp传递到setEmergencyContact()时出错。我得到的错误是关于:C++ 传入引用与指针,c++,C++,将newTemp传递到setEmergencyContact()时出错。我得到的错误是关于: temp->Contact::setEmergencyContact(newTemp); “错误:没有对‘Contact::setEmergencyContact(*&Contact)’的匹配函数调用” 所以我的问题是:如果必须使用指针创建对象,如何将对象传递给使用引用而不是指针的函数 Contact generateRandomContact(){ // The name w
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)
取消引用它:
temp->setEmergencyContact(*newTemp)
要么公正
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)
要使用您的代码,请仍然使用->
而不是
但是,如果要修改指针本身,可以使用
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的使用。编辑函数以获取指针:
void Contact::setEmergencyContact(Contact * _emergencyContact)
或者按照zmbq的建议取消对传递指针的引用
我看到您使用了很多new和delete,我不得不推荐智能指针,并尽量减少new和delete的使用。太多了
new
,您是想标记这个java
?(显然不是,但是请你把这些无用的指针去掉)一个新的临时工对我来说似乎有点可疑。。setEmergencyContact()
是否拥有所有权并在以后删除?否则,您将使用新的内存泄漏newTemp
和temp
看起来都很可能是内存泄漏。您的代码中似乎有几个打字错误,比如使用emergencyContact
而不是\u emergencyContact
以及类似的错误。@RaphaelMiedl它稍后会删除,很抱歉没有包含该代码,user35443我将重命名它们,在我的代码中,它可能更清楚。@ GRILO现代C++代码不应该使用已拥有的原始指针(甚至有些人甚至使用单独的类来借用原始指针),并且完全避免new
/delete
,而支持make_unique
/make_shared
或者仅仅通过值来拥有对象。太多的new
,你是想标记这个java
?(显然不是,但是请你把这些无用的指针去掉)一个新的临时工对我来说似乎有点可疑。。setEmergencyContact()
是否拥有所有权并在以后删除?否则,您将使用新的内存泄漏newTemp
和temp
看起来都很可能是内存泄漏。您的代码中似乎有几个打字错误,比如使用emergencyContact
而不是\u emergencyContact
以及类似的错误。@RaphaelMiedl它稍后会删除,很抱歉没有包含该代码,user35443我将重命名它们,在我的代码中,它可能更清楚。@ GRILO现代C++代码不应该使用已拥有的原始指针(甚至有些人甚至使用单独的类来借用原始指针),并且完全避免new
/delete
,而支持make_unique
/make_shared
或者仅仅通过值来拥有对象。太多的new
,你是想标记这个java
?(显然不是,但是请你把这些无用的指针去掉)一个新的临时工对我来说似乎有点可疑。。setEmergencyContact()
是否拥有所有权并在以后删除?否则,您将使用新的内存泄漏newTemp
和temp
看起来都很可能是内存泄漏。您的代码中似乎有几个打字错误,比如使用emergencyContact
而不是\u emergencyContact
以及类似的错误。@RaphaelMiedl它稍后会删除,很抱歉没有包含该代码,user35443我将重命名它们,在我的代码中,更清楚的是,GRILO现代C++代码不应该使用自有的原始指针(甚至有些人甚至使用一个单独的类来借用原始指针),并且完全避免<代码>新的< /代码> />代码>删除<代码>,以支持<代码> MaxION/<代码> /Max>共享My/<代码>或仅按值拥有对象。我仍然难以理解带函数指针的概念。谢谢你的帮助。这很有效,我仍然难以理解带函数指针的概念。谢谢你的帮助。这很有效,我仍然难以理解带函数指针的概念。谢谢你的帮助。