C++ 从函数返回错误实例

C++ 从函数返回错误实例,c++,function,return,instance,biginteger,C++,Function,Return,Instance,Biginteger,我很难弄清楚为什么当从+=返回到+函数时,我的BigInt实例和自定义向量类(BigIntVector)会发生变化。看看我在main.cpp中的例子,我们有40+(-30),在我的BigInt.cpp代码中,这意味着它将把它变成40-30(然后在末尾打印负号,因为'isPositive'bool是false)。使用调试器,我可以确定-=将正确的10值返回到+=。因此,in+='tenthis'包含包含10的向量,并返回到+函数。然而,当它返回到+函数时,该范围内的“testhis”变为40?有什

我很难弄清楚为什么当从+=返回到+函数时,我的BigInt实例和自定义向量类(BigIntVector)会发生变化。看看我在main.cpp中的例子,我们有40+(-30),在我的BigInt.cpp代码中,这意味着它将把它变成40-30(然后在末尾打印负号,因为'isPositive'bool是false)。使用调试器,我可以确定-=将正确的10值返回到+=。因此,in+='tenthis'包含包含10的向量,并返回到+函数。然而,当它返回到+函数时,该范围内的“testhis”变为40?有什么原因吗

多谢各位

BigInt.cpp加法

// binary addition
BigInt BigInt::operator+(BigInt const& other) const {

    BigInt tempThis = BigInt(*this);
    tempThis += other; //tempThis becomes 40 which isn't 10 for 40-30!!!!!!!
    return tempThis;
}

// compound addition-assignment operator
BigInt BigInt::operator+=(BigInt const& other) {

    if (!other.isPositive) {
        BigInt tempThis = BigInt(*this);
        tempThis -= other; //tempThis is correctly assigned 10 for 40-30!!!!!!!!
        cout << "get element at 0 +=: " << tempThis.bigIntVector->getElementAt(0) << endl;
        return tempThis;
    }
//二进制加法
BigInt BigInt::运算符+(BigInt常量和其他)常量{
BigInt TENTHIS=BigInt(*此);
诱惑他+=其他;//诱惑他变成40,而不是40-30的10!!!!!!!
回报他;
}
//复合加法赋值算子
BigInt BigInt::运算符+=(BigInt常量和其他){
如果(!other.isPositive){
BigInt TENTHIS=BigInt(*此);
TENTHIS-=other;//TENTHIS被正确分配为40-30的10!!!!!!!!

cout您缺少赋值运算符的重载,需要返回对BigInt的引用,即

BigInt& BigInt::operator+(BigInt const& other) const 

您缺少赋值运算符的重载,需要返回对BigInt的引用,即

BigInt& BigInt::operator+(BigInt const& other) const 

复合加法赋值运算符
+=
应为:

BigInt& BigInt::operator+=(BigInt const& other)
  • 修改其自身价值;以及
  • 返回对自身的引用,而不是其值的副本
  • 签名应为:

    BigInt& BigInt::operator+=(BigInt const& other)
    
    在它里面,您不想使用临时值,或者如果您有可能发生的故障条件,并且想要保证行为,请使用临时变量,然后在成功时覆盖“this”对象

    请查看此页面:
    更多信息。如果您不想阅读全部内容,请在页面中搜索“复合赋值运算符”。

    您的复合加法赋值运算符
    +=
    应为:

    BigInt& BigInt::operator+=(BigInt const& other)
    
  • 修改其自身价值;以及
  • 返回对自身的引用,而不是其值的副本
  • 签名应为:

    BigInt& BigInt::operator+=(BigInt const& other)
    
    在它里面,您不想使用临时值,或者如果您有可能发生的故障条件,并且想要保证行为,请使用临时变量,然后在成功时覆盖“this”对象

    请查看此页面:
    有关详细信息,请在页面中搜索“复合赋值运算符”如果你不想读整件事。

    我很笨。不幸的是,打印40而不是30,这仍然不是10。更新帖子。40-30应该是10。你是对的,但是一个正布尔值在它为假的时候会在前面打印一个负数。无论哪种方式,我都在寻找一个不是40的10。我昨天花了一个小时尝试为了弄清楚为什么有东西挂起来了,然后找到了我前一天添加的睡眠(20000)。不幸的是,这只会进一步破坏事情。任何正常的添加(不必使用if语句来表示否定的“other”)工作非常好,返回正确的值。我怀疑问题出在if语句的某个地方,我想我返回了错误的东西。在if语句之外,我只返回“*this”@jankyCoder。你能为BigInt发布声明吗?我理解你想说的,但需要+=成为BigInt&instead我很笨。不幸的是,打印40而不是30,仍然不是10。更新post.40-30应该是10你是对的,但是当它为假时,一个正布尔值在前面打印一个负数。无论哪种方式,我都在寻找一个不是40的10。我们都去过那里。我昨天花了一个小时试图弄清楚为什么有东西挂着,然后发现没有他睡眠(20000)是我前一天加的,不幸的是,这只会进一步破坏事情。任何正常的加法(不涉及否定“其他”的if语句)工作非常好,返回正确的值。我怀疑问题出在if语句的某个地方,我想我返回了错误的东西。在if语句之外,我只返回“*this”@jankyCoder,你能为BigInt发布声明吗?我理解你的意思,但需要+=成为BigInt&而不是原来的它!谢谢!就是它!谢谢!