2016-03-26 20 views
-2

ben bu hataHata: operatör + için maç benim kod derlemeye çalıştığınızda

main.C:270:16: error: no match for ‘operator+’ (operand types are ‘LargeInt’ and ‘LargeInt’) 
result = a + b; 

i bir kaç şey denedim ama bunu düzeltmek için nasıl bilemiyorum olsun (işlenenler türleri LargeInt ve LargeInt vardır). Bu, ana dosyamdaki sorunu veren kısımdır. Ben Test dosyadaki her koşul henüz zaman ancak herhangi at parçalarını test oldu dikkate almamış

 LargeInt& operator+(const LargeInt& a, const LargeInt& b) 
    { 
     LargeInt temp; 
     if(a.sign == positive && b.sign == positive) 
     { 
       if(a.len > b.len) 
       { 
        for(int i = 0; i < a.len; i++) 
        { 
          temp.largeInt[i] = a.largeInt[i] + b.largeInt[i]; 
        } 
       } 
       else if(b.len > a.len) 
       { 
        for(int i = 0; i < b.len; i++) 
        { 
          temp.largeInt[i] = a.largeInt[i] + b.largeInt[i]; 
        } 
       } 
       for(int i = temp.len; i > 0; i--) 
       { 
        cout << temp.largeInt[i]; 
       } 
     } 
     return temp; 
    } 

: Burada

cout << "TEST: operator +" << endl; 
a = LargeInt(11529); 
b = LargeInt(489); 
d = LargeInt(-11529); 
e = LargeInt(-489); 

LargeInt result; 

cout << " CASE: 11529 + 489 = 12018" << endl; 
result = a + b; 
cout << " RESULT: " << result << endl; 

cout << " CASE: -11529 + -489 = -12018" << endl;; 
cout << " RESULT: " << result << endl; 

cout << " CASE: -11529 + 489 = -11040" << endl;; 
cout << " RESULT: " << result << endl; 

cout << " CASE: 11529 + -489 = -11040" << endl;; 
cout << " RESULT: " << result << endl; 

cout << "DONE" << endl; 

'+' operatörü benim tanımında kodudur tam olarak bu hatanın ne anlama geldiğini veya nasıl düzeltileceğini anlatan yardım için teşekkür ederiz.

+0

Derleyici sorunundan emin değilsiniz, ancak operatörünüz + kesinlikle yanlıştır ve tanımlanmamış davranışlarla sonuçlanır: kapsam dışı kalan ve zaten yok olan geçici bir başvuruya geri dönülüyor. Operatör geri döndüğünde imha edilen 'temp' referansı döndürüyor. Derleyici hatasını araştırmak için, [mcve] göndermeniz gerekir. –

+0

Bu, operatör + 'bir üye işlevi midir? Arkadaş fonksiyonu? Ya da ne? –

+0

Arkadaş oldular – programmer0980

cevap

-3

Operatörün imzası sadece bir tane LargeInt argümanı almalıdır. Artı ikili bir operatördür (iki işlenen alır). Diğer işlenen, "+" çağrısının yapıldığı nesnedir ("bu" anahtar sözcüğü tarafından başvurulan).

Derleyici size bu hatayı verir, çünkü iki LargeInts (sizin 3 alır) alan + işleç tanımlanmamış.

+0

Bu yanlış. Operatör + asla üç argüman alır. Bu doğruysa, derlenmeyecek. –

+0

Cevabımı yeniden okumanız gerektiğini düşünüyorum. + Imzasının üç argüman aldığını söylüyorum. Sadece iki tane almalı. – mwm314

+0

Aslında, operatöre + iki argüman ileterek aşırı yükleyebilirsiniz. Onun sorunu şu anda – DimChtz