7

Şu anda == işleci için aşırı yüklenmiş bir işlev oluşturmaya çalışıyorum. Bağlı listem için bir hpp dosyası oluşturuyorum ve bu operatörün hpp dosyasında çalışmasını sağlayamıyorum.== işlevinin aşırı yüklenmesi

Şu anda bu var:

template <typename T_> 
class sq_list 
{ 

bool operator == (sq_list & lhs, sq_list & rhs) 
{ 
    return *lhs == *rhs; 
}; 

reference operator *()  { 
     return _c; 
    }; 

}; 
} 

Ben yaklaşık 10 hata olsun ama hata olarak hemen hemen tekrar:

C2804: ikili 'operatör ==' çok fazla parametreleri
C2333 vardır : 'sq_list :: operator ==': işlev bildiriminde hata; atlama işlevi vücut
C2143: sözdizimi hatası: eksik ';' '*'
C4430'dan önce: eksik tür belirteci - int varsayıldı. Not: C++ varsayılan-int Etrafa şeyler değişiyor denedim ama constanly

Herhangi bir ipucu veya bu konuda yardım yukarıdaki ile aynı hataları almak

büyük takdir desteklemez.

+0

Bu tabloyu kapaBu tabloyu aç Flexo

+0

Ve eğer üye bir işlevse, bir resim alır ve bu – Flexo

+0

@awoodland kullanır: Hayır, yapmazsınız; Bir sınıf şablonu tanımının içinde, şablon adı yalnızca geçerli şablon örneğine başvurabilir. Ve OP'nin kodunda zaten hiçbir T değil. –

cevap

7

Üye işleç yalnızca diğer nesne olan tek bağımsız değişkenine sahiptir. İlk nesne, örneğin kendisi:

template <typename T_> 
class sq_list 
{ 
    bool operator == (sq_list & rhs) const // don't forget "const"!! 
    { 
     return *this == *rhs; // doesn't actually work! 
    } 
}; 
Bu tanım aslında sadece mantıksal olarak adlandırdığı için anlam ifade etmemektedir. Bunun yerine, return this->impl == rhs.impl; gibi bazı üye işlemlerini çağırmalıdır.
0

Bir yöntem örnekleri alacağından, sınıf tanımının bir parçası olarak == aşırı yükünü bildiriyorsunuz. Bu nedenle, istediğiniz ilk parametre olan lhs zaten örtüktür: bir örnek içinde this erişiminiz olduğunu unutmayın. bir sınıfın bir parçası olarak

class myClass { 
    bool operator== (myClass& other) { 
     // Returns whether this equals other 
    } 
} 

operatör ==() yöntemi "bu amaca nasıl diğerlerine kendini karşılaştırma bilir" olarak anlaşılmalıdır.

Eğer daha mantıklı olursa, iki argümanı, karşılaştırılan her iki nesneyi almak için sınıfın dışında operatör ==() yükleyebilirsiniz. Buraya bakın: http://www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/

0

http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html

karşılaştırma operatörleri çok basittir. Böyle bir fonksiyon imza kullanarak ilk == tanımlayın:

sınıfla nesneleri karşılaştırmak NASIL
bool MyClass::operator==(const MyClass &other) const { 
    ... // Compare the values, and return a bool result. 
    } 

tüm senindir.

İlgili konular