gpt4 book ai didi

c++ - exc_arithmetic 错误,c++ xcode 4.62

转载 作者:行者123 更新时间:2023-11-30 01:58:11 26 4
gpt4 key购买 nike

我是 C++ 的初学者。我想知道为什么在这一行抛出异常:

operator double() const
{
return this->denominator/this->numerator;
}

我找到了 numerator == 0,但我在 ctor 中给出了默认值。为什么?请帮助我。

class Rational {
public:
int numerator;
int denominator;

Rational(int numerator = 2, int denominator = 1)
{
numerator = 2;
denominator = 1;
};

operator double() const
{
return this->denominator/this->numerator;
};

};

int main(int argc, const char * argv[])
{
Rational r(1, 2);
cout << r;
// double d = 0.5*r;
return 0;
}

最佳答案

首先,这一行非常错误:

Rational(int numerator = 2, int denominator = 1){ numerator = 2; denominator = 1;};

参数 numeratordenominator 位于 ctor 的栈帧中,因此隐藏了类的成员 Rational::numerator Rational::denominator 其次,您完全忽略了调用者实际发送的参数(不是因为您指定了默认值,而是因为您明确设置了 numerator=2; denominator=1. 这一行实际上应该是:

Rational(int numerator = 2, int denominator = 1){ this->numerator = numerator; this->denominator = denominator;};

或者您可以使用初始化列表(和重载的构造函数):

Rational() : numerator(2), denominator(1) {};
Rational(int numerator, int denominator) : numerator(numerator), denominator(denominator) {};

现在,第二个问题是 int/int => int::将一个整数除以另一个整数会产生整数除法,您需要将其中一个 int 转换为 double,这样两个 int 都是在计算除法之前向上转换为 double,如下所示:

operator double() const{ return ((double)this->denominator)/this->numerator;};

关于c++ - exc_arithmetic 错误,c++ xcode 4.62,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17789608/

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