我正在尝试通过重载双转换运算符来为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。
有人可以帮我找到问题吗?非常感谢你。
答案 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) )