1

我正在尝试使用 setRealPart 方法将 -1.4 分配给 Complex 类的对象 c4 中的双精度。但是它给了我一个错误。

以下是相关代码:

原型:

void setRealPart(double &);

定义:

void Complex::setRealPart(double &real)
{
real = this->rpart; 
}

执行:

c2.setRealPart(-1.4);`

构造函数:

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)

4

2 回答 2

4

当您将非常量引用传递给函数时,该函数应该能够修改传入的元素。 的签名setRealPart表明调用者应该能够修改您传入的任何内容(这当然是错误的:setter 不应该修改他们的参数)。

我正在尝试将 -1.4 分配给 Complex 类的对象 c4 中的双精度

那么你的分配也会出错:你应该分配this->rpart = real,而不是相反。

由于这是一个 setter,最好的方法是删除 & 符号,并通过double值传递:

void Complex::setRealPart(double real)
{
    this->rpart = real; 
}

最后,由于您不打算修改real传入的值,请考虑声明它const,如下所示:

void Complex::setRealPart(const double real)
{
    this->rpart = real; 
}
于 2013-10-15T21:13:39.603 回答
2

您不能将非常量左值引用绑定到右值,这是您在此处尝试执行的操作:

c2.setRealPart(-1.4);

您需要const参考。除此之外,你的任务是错误的方式。这会起作用:

void Complex::setRealPart(const double &real) { rpart = real; }
//                        ^^^^^

double取值:

void Complex::setRealPart(double real) { rpart = real; }
于 2013-10-15T21:11:17.160 回答