【问题标题】:Why does initializing an objects method with double& not work? [duplicate]为什么使用 double& 初始化对象方法不起作用? [复制]
【发布时间】:2013-10-23 20:12:36
【问题描述】:

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

以下是相关代码:

原型:

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)

【问题讨论】:

  • 您不能将临时对象绑定到非常量引用。您也尝试将this->rpart 分配给-1.4,这完全没有意义。
  • 你为什么用double&而不是double

标签: c++ class pointers reference


【解决方案1】:

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

c2.setRealPart(-1.4);

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

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

或按值取double

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

【讨论】:

  • 或者只是做double real
  • @0x499602D2 同意,那将是更好的选择。
【解决方案2】:

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

我正在尝试将 -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; 
}

【讨论】:

    猜你喜欢
    • 2019-12-22
    • 2018-05-07
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2021-10-23
    • 2020-01-09
    相关资源
    最近更新 更多