首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >exc_arithmetic错误,c++ xcode 4.62

exc_arithmetic错误,c++ xcode 4.62
EN

Stack Overflow用户
提问于 2013-07-22 22:03:57
回答 2查看 432关注 0票数 1

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

代码语言:javascript
复制
operator double() const
{
    return this->denominator/this->numerator;
}

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

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-22 22:14:56

首先,这一行是非常错误的:

代码语言:javascript
复制
Rational(int numerator = 2, int denominator = 1){ numerator = 2; denominator = 1;};

参数numeratordenominator位于ctor的堆栈框架中,从而隐藏了类的成员Rational::numeratorRational::denominator;其次,您完全忽略了调用方实际发送的参数(不是因为您指定了默认值,而是因为您显式设置了numerator=2; denominator=1。这一行实际上应该是:

代码语言:javascript
复制
Rational(int numerator = 2, int denominator = 1){ this->numerator = numerator; this->denominator = denominator;};

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

代码语言:javascript
复制
Rational() : numerator(2), denominator(1) {};
Rational(int numerator, int denominator) : numerator(numerator), denominator(denominator) {};

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

代码语言:javascript
复制
operator double() const{ return ((double)this->denominator)/this->numerator;};
票数 2
EN

Stack Overflow用户

发布于 2013-07-22 22:14:26

代码语言:javascript
复制
    Rational(int numerator = 2, int denominator = 1)
{
    numerator = 2;
    denominator = 1;
};

我会将其更改为

代码语言:javascript
复制
    Rational(int numerator, int denominator)
{
    this->numerator = numerator;
    this->denominator = denominator;
};

我不知道这是不是导致了你的问题,但我认为这是导致问题的原因之一。您对Rational(int,int)的调用仍然可以正常工作,并将您指定的值添加到您正在创建的对象中。

你代码的问题在于作用域。我相信您只是重新分配了参数/参数,而不是实际重新分配实例变量,我假设这就是您的目标。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17789608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档