2010-08-04 19 views
9

İki yapılar vardır:C++: Veraset ve Operatör Yükleme

template <typename T> 
struct Odp 
{ 
    T m_t; 

    T operator=(const T rhs) 
    { 
     return m_t = rhs; 
    } 
}; 

struct Ftw : public Odp<int> 
{ 
    bool operator==(const Ftw& rhs) 
    { 
     return m_t == rhs.m_t; 
    } 
}; 

isterim derlemek için aşağıdaki:

int main() 
{ 
    Odp<int> odp; 
    odp = 2; 

    Ftw f; 
    f = 2; // C2679: no operator could be found 
} 

bu işi yapmak için herhangi bir yolu var mı, yoksa tanımlamalıdır Ftw da operatör?

+0

Genellikle 'operatör =' const referans parametre alır ... Bu 'değiştirmek daha iyi olurdu T operatörü = T operatörü =' üzere (const T rhs) '(const: Sen kullanarak nize söyleyerek bu geçersiz kılabileceğini T & rhs) – a1ex07

cevap

22

Sorun, derleyici genellikle sizin için bir operator= oluşturur (siz sağlamadığınız sürece) ve bu operator= devralınan birini gizler.

struct Ftw : public Odp<int> 
{ 
    using Odp<int>::operator=; 
    bool operator==(const Ftw& rhs) 
    { 
     return m_t == rhs.m_t; 
    } 
}; 
+0

Güzel! Bunu bilmiyordum. –

İlgili konular