2012-02-09 44 views
1

我遇到了兩個函數的問題。我有一個operator =方法以及一個add方法。他們自己工作的很好,因爲在一次編譯期間我只能使用其中一個。例如,我需要註釋掉add函數,以使operator =方法起作用,反之亦然。這些錯誤我得到10 no match for 'operator=' in 'c = (&a)->HUGE_INT::add(((HUGE_INT&)(&b)))'運算符=函數和添加函數似乎不能共存

 HUGE_INT HUGE_INT::operator=(HUGE_INT &orig) 
     { 
     //code 
     return *this; 
     } 

     HUGE_INT HUGE_INT::add(HUGE_INT &a) 
     { 
     //code 
     return object; 
     } 

//client 
    HUGE_INT a(9999999),b(1111),c,d; 
     c = a.add(b); 
     d = a; 
+0

您可以發佈描述您認爲應該編譯的錯誤代碼的最簡單示例,但不是因爲您所詢問的具體錯誤。 – 2012-02-09 04:30:42

+0

就像我說的那樣,當客戶端中只有一個客戶端使用它時,函數可以正常工作,但是當兩個客戶端都被調用時,問題 – user1198783 2012-02-09 04:35:23

+1

我現在看到它,add是返回一個臨時的,而operator =需要一個非const參考。你不能形成臨時的非const引用。 – 2012-02-09 04:38:54

回答

5

,你所遇到的問題是,你是按值從add返回,並通過非const引用取參數operator=

add返回的臨時對象是右值,因此它不能綁定到非const引用。

除非你正在做的事情很奇怪,你可能想改變operator=參考採取其參數爲const:

HUGE_INT& HUGE_INT::operator=(HUGE_INT const& orig) 
    { 
    //code 
    return *this; 
    } 

(我也改變了它的引用返回,因爲這是標準的簽名對於operator=。)

+0

忘了這一點,它現在有用,謝謝 – user1198783 2012-02-09 04:41:32

1

我修復了你的代碼,因爲它現在沒有做任何事情,就像在你的例子中那樣,但它編譯。 原因在於您需要將'='運算符的參數指定爲常量,並且如其他海報所述,您還應該返回對該對象的引用。

class HUGE_INT 
{ 
public: 
HUGE_INT(){this->var = 0;} 
HUGE_INT(int v){this->var = v;}; 

HUGE_INT& operator=(const HUGE_INT &orig) 
{ 

return *this; 
} 

HUGE_INT add(HUGE_INT &a) 
{ 
    HUGE_INT object; 
return object; 
} 

private: 
    int var; 
}; 


int main() 
{ 


//client 
HUGE_INT a(9999999),b(1111),c,d; 
    c = a.add(b); 
    d = a; 
} 

爲了更好地瞭解退房運營商tutorial重載

1

operator=應該返回參考以及採取const引用;也就是說,它應該有一個簽名HUGE_INT& HUGE_INT::operator=(const HUGE_INT& orig)

作爲一個方面說明,對於類名使用全部大寫的C++風格是非常糟糕的。所有的首都通常都是爲宏而保留的。