3 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
因?yàn)槟愕暮瘮?shù)參數(shù)是左值引用,它不能引用到一個(gè)通過(guò)轉(zhuǎn)換構(gòu)造函數(shù),臨時(shí)構(gòu)造的對(duì)象。
只有常左值引用,即加上const,才可以引用臨時(shí)對(duì)象。

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
c3 = c1 + Complex(a);這樣就行了吧,你的構(gòu)造沒(méi)有定義復(fù)數(shù)與int相加
再說(shuō)的+運(yùn)算符重載這樣寫不就行了
Complex operator+(Complex&c1)
{
return Complex(c1.real + real, c1.imag + imag);
};

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊
這個(gè)問(wèn)題挺有意思。
我認(rèn)為形參不加const,將調(diào)用形參的拷貝構(gòu)造函數(shù)先復(fù)制一個(gè)對(duì)象出來(lái),而Complex類沒(méi)有拷貝構(gòu)造函數(shù)也不會(huì)接受int型的參數(shù),所以編譯報(bào)錯(cuò)。
加const后,函數(shù)不會(huì)復(fù)制實(shí)參,在調(diào)試過(guò)程中發(fā)現(xiàn)調(diào)用了Complex(int a)這個(gè)構(gòu)造函數(shù),我猜想可能編譯器在這個(gè)時(shí)候做了個(gè)隱含的類型轉(zhuǎn)換吧,c3=c1+a;估計(jì)就變成了c3=c1+(Complex)a;
添加回答
舉報(bào)