gpt4 book ai didi

c++ - 重载 << 运算符时出现未处理的异常

转载 作者:行者123 更新时间:2023-11-27 22:45:33 26 4
gpt4 key购买 nike

我正在尝试为检测操作溢出的 New Integer 类重载 << 运算符,下面是我的部分代码:

    class NewInteger{
private:
int num;

public:
NewInteger();
NewInteger(int);
friend std::ostream &operator <<(std::ostream& out, const NewInteger& rhs);
NewInteger operator+ (NewInteger);

.../ many other member functions/
}

实现是:

    NewInteger NewInteger::operator+(NewInteger n)
{
int a = this->getValue();
int b = n.getValue();
if (a > 0 && b > max - a) {
throw std::exception();
std::cout << "studpid" << std::endl;
}
if (a < 0 && b < min - a) {
throw std::exception();
}

return NewInteger(a + b);
}
std::ostream & operator<<(std::ostream & out, const NewInteger& rhs)
{
out << rhs;
return out;
}

在 main.cpp 中,我尝试通过运行来测试代码:

    NewInteger n7(4);
NewInteger n8(5);
std::cout << n7.operator+(n8) << std::endl;

代码构建良好,当我在 Visual Studio 2015 上运行它时,它会导致程序关闭而不会出现 fatal error 。所以当我调试代码时,它给了我:`

Exception thrown at 0x00C43B49 in NewInteger.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x00192F90)

断点恰好出现在 operator<< 的实现处。但是我无法弄清楚我应该在实现时 try catch 什么异常。

有人能告诉我这是什么原因吗?

最佳答案

std::ostream & operator<<(std::ostream & out, const NewInteger& rhs)
{
out << rhs;
return out;
}

第一行调用operator<<outrhs -- 这是您正在定义的功能。你有无限递归。

关于c++ - 重载 << 运算符时出现未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43460531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com