![](/img/trans.png)
[英]Error: No match for 'operator>>' Overloading istream operator
[英]Getting error with istream operator overloading
point2D &operator>>(istream &in, point2D &p)
{
char c = ' ';
cout << "please input x and y coordinate : ";
in >> p.x >> c >> p.y;
return p;
}
为这种类型为 circle 的结构变量定义重载输入运算符 >>。 在正文中,在提示后,通过上面定义的输入运算符读取圆心,以获取类型为 point2d 的点和来自作为参数传递的字符输入 stream 引用的半径的浮点数。
检查读入的半径是否为负,否则在标准字符错误 output stream 上写入消息并反转符号。
这是我的尝试:
circle &operator>>(istream &input, circle &cir)
{
//cout << "input center:" << endl;
point2D p;
istream(input, p);
//input >> cir.center.y;
//cout << "please input radius : ";
input >> cir.radius;
if (cir.radius < 0)
{
cout << "in operator>> : negative radius, sign changed";
cir.radius = cir.radius * -1;
}
return cir;
}
我收到一个错误:
没有用于初始化“std::istream”(又名“basic_istream<char>”)的匹配构造函数
第一个重载的operator>>
应该返回istream&
,如下所示。
其次,由于我们将第二个参数(在本例中为cir&
)作为参考传递,因此无需返回它,因为您对cir
所做的任何更改都已反映在其上。
第三验证输入是否成功。 如果输入不成功,则将传递的参数保留在默认 state中。
/* no need to return cir because it is already passed by reference as argument,
so any changes you make on cir it will be reflected on it*/
std::istream &operator>>(istream &input, circle &cir)
{
//cout << "input center:" << endl;
point2D p;
input >> p ; //this assumes you've overloaded `operator>>` for point2D class
//input >> cir.center.y;
//cout << "please input radius : ";
input >> cir.radius;
//always validate if input was successful
if(input)
{
if (cir.radius < 0)
{
cout << "in operator>> : negative radius, sign changed";
cir.radius = cir.radius * -1;
}
}
else
{
cir = circle();//leave the cir in default state
}
return input;//return the istream object that was passed as argument
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.