我试图使用setRealPart方法将-1.4分配给Complex类的对象c4中的double。但是它给了我一个错误。
以下是相关代码:
原型:
void setRealPart(double &);
定义:
void Complex::setRealPart(double &real)
{
real = this->rpart;
}
实现:
c2.setRealPart(-1.4);`
Consturctor:
Complex::Complex(double realpart,double impart)
{
rpart = realpart;
ipart = impart;
}
我收到的错误是:No known conversion for argument from double to double&
2. No matching function call setRealPart(double)
答案 0 :(得分:4)
当你将一个非const引用传递给一个函数时,该函数应该能够修改传入的元素。setRealPart
的签名表明调用者应该能够修改你传入的任何内容(当然,这是错误的:设置者不应该修改他们的论点。)
我试图将-1.4分配给Complex类
的对象c4中的double
你的作业也是错误的:你应该分配this->rpart = real
,而不是相反。
由于这是一个setter,最好的方法是删除&符号,并按值传递double
:
void Complex::setRealPart(double real)
{
this->rpart = real;
}
最后,由于您不打算修改传入的real
的值,请考虑将其声明为const
,如下所示:
void Complex::setRealPart(const double real)
{
this->rpart = real;
}
答案 1 :(得分:2)
您不能将非常量左值引用绑定到右值,这是您尝试在此处执行的操作:
c2.setRealPart(-1.4);
您需要参考const
。除此之外,你的任务是错误的。这可行:
void Complex::setRealPart(const double &real) { rpart = real; }
// ^^^^^
或按值double
获取:
void Complex::setRealPart(double real) { rpart = real; }