对象加倍转换错误

时间:2017-03-07 23:29:43

标签: c++

我正在尝试通过重载双转换运算符来为Big Integer程序编写一个双转换器的对象。为此,我将大整数转换为字符串,然后使用stod函数将其转换为double。这是函数的副本:

BigInteger::operator double () {
    std::string *str = new std::string[this->m_digitCount];
    for (int j = 0; j < this->m_digitCount; j++) {
        str[j] = this->getDigit(j);
    }
    double a = std::stod(*str);
    return a;
}

为了澄清,m_digitCount是给定对象中的位数。

当我运行该程序时,它崩溃并说'abort()已被调用。'

我插入了一个断点,发现程序在

行崩溃了
double a = std::stod(*str)

当发生这种情况时,它说

Assign4中的0x00007FFB1DEF7788处的未处理异常 - Big Integer.exe:Microsoft C ++异常:内存位置0x00000043F48FD780处的std :: invalid_argument。

有人可以帮我找到问题吗?非常感谢你。

1 个答案:

答案 0 :(得分:2)

这不符合你的想法:

std::string *str = new std::string[this->m_digitCount];

分配一个空字符串数组。我不知道你的代码是如何编译的。

无论如何,你打算这样做:

std::string str;
str.reserve( m_digitCount );
for (int j = 0; j < m_digitCount; j++) {
    str.push_back( getDigit(j) );
}
return std::stod(str);

请注意,数字应为字符类型。如果它只是0到9之间的整数,则必须执行str.push_back( '0' + getDigit(j) )