为什么用double和amp;初始化对象方法?不行?

时间:2013-10-15 21:09:30

标签: c++ class pointers reference

我试图使用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)

2 个答案:

答案 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; }