【发布时间】:2018-01-09 03:30:54
【问题描述】:
我收到错误
将“const double”绑定到“double&”类型的引用会丢弃限定符
编译时:
g++ -std=c++11 main.cpp
main.cpp: In function ‘Point square(const Point&)’:
main.cpp:14:28: error: binding ‘const double’ to reference of type ‘double&’ discards qualifiers
for(double &a:{Q.x,Q.y,Q.z})
^
虽然网上还有其他关于这个错误的问题,但我正在寻找这个特定代码的解决方案。我坚持使用ranged for。
#include <iostream>
#include <vector>
class Point
{
public:
double x,y,z;
};
Point square(const Point &P)
{
Point Q=P;
for(double &a:{Q.x,Q.y,Q.z})
a*=a;
return Q;
}
int main()
{
Point P{0.1,1.0,10.0};
Point Q=square(P);
std::cout<<"----------------"<<std::endl;
std::cout<<"Q.x: "<<Q.x<<std::endl;
std::cout<<"Q.y: "<<Q.y<<std::endl;
std::cout<<"Q.z: "<<Q.z<<std::endl;
std::cout<<"----------------"<<std::endl;
return 0;
}
【问题讨论】:
-
为什么要通过P?为什么不
P.square()? -
@stark,这是一个 MWE,实际上功能更加定制化。将函数放在类中是不值得的。 BTW,一个方法也会有类似的问题,不是吗?
-
I insist on using ranged for... 为什么? -
@txtechhelp,否则我应该多次编写代码。
-
多次写什么代码?您正在修改一个不会修改任何内容的临时变量。您是否打算将 3 个变量倍增,例如
double t = x * y * z;?从您的代码中不清楚您实际上要做什么,以及为什么您必须使用范围 for 循环。
标签: c++ c++11 ranged-loops