【问题标题】:Issue with overloading insertion and extraction operators in C++在 C++ 中重载插入和提取运算符的问题
【发布时间】:2021-04-24 11:51:59
【问题描述】:

目前正在学习 C++。我遇到了一个问题,我重载了运算符并包含了一个默认构造函数,但是,VSC 一直说我没有包含一个。我已经将我的代码与我发现的类似代码进行了比较,并且语法非常相似,但我仍然无法运行它。想知道我是否可能有疏忽等。

class DegreeAngle
{
    private:
        int angle;
    public:
        DegreeAngle(){angle = 0;}
        DegreeAngle(const int angleInput) : angle(angleInput){}
        friend int operator+(const DegreeAngle& angleOne, const DegreeAngle& angleTwo);
        friend int operator-(const DegreeAngle& angleOne, const DegreeAngle& angleTwo);
        friend std::istream& operator >>(std::istream& ins, const DegreeAngle& angle);
        friend std::ostream& operator <<(std::ostream& outs, const DegreeAngle& angle);
};
int main()
{
    DegreeAngle a1;
    std::cin >> a1;
    std::cout << a1;
}
int operator+(const DegreeAngle& angleOne, const DegreeAngle& angleTwo)
{
    DegreeAngle sumAngle = angleOne.angle + angleTwo.angle;
    return sumAngle.angle;
}
int operator-(const DegreeAngle& angleOne, const DegreeAngle& angleTwo)
{
    DegreeAngle subAngle = angleOne.angle - angleTwo.angle;
    assert(subAngle.angle>=0);
    return subAngle.angle;
}
std::istream& operator >>(std::istream& ins, const DegreeAngle& angleInput) 
{
    ins >> angleInput.angle;
    return ins;
}
std::ostream& operator <<(std::ostream& outs, const DegreeAngle& angleInput) 
{
    outs << angleInput.angle;
    return outs;
}

【问题讨论】:

  • 请编辑您的问题并显示 exact 错误消息。我可以看到的一个问题是您的 operator&gt;&gt; 函数正在尝试修改 const DegreeAngle&amp; 对象。这是不允许的。该参数应该是非常量。

标签: c++ operator-overloading friend-function


【解决方案1】:

您的程序当前正在编译并具有无限递归:

std::istream& operator >>(std::istream& ins, const DegreeAngle& angleInput) 
{
    ins >> angleInput.angle; // No operator >>(istream&, const int&)
                             // but DegreeAngle(int) is not explicit
                             // so we use ins >> DegreeAngle(angleInput.angle)
                             // -> infinite recursion.
    return ins;
}

friend std::istream&amp; operator &gt;&gt;(std::istream&amp; ins, const DegreeAngle&amp; angle); 应该是

friend std::istream&amp; operator &gt;&gt;(std::istream&amp; ins, DegreeAngle&amp; angle);(作为它的定义)。

【讨论】:

    猜你喜欢
    • 2012-09-19
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 2012-05-09
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    相关资源
    最近更新 更多