繁体   English   中英

istream 运算符重载时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM