2011-06-11 23 views
5

Önce biraz arka plan, şablonları kullanarak iki kez bağlantılı bir liste hazırladım. Hesap kimliğini karşılaştırmak için "==" operatörünü aşırı yüklediğim bir "hesap" sınıfım var. Hesapları tutmak için bağlantılı bir liste oluşturdum. Aşırı yüklenmiş işleç algılanamıyor

Ben listeye yeni bir hesap eklemek

, bu "içeriyor?" Çağrıları == operatörünü çağıran yöntem. Hata çağrılan ve g ++ şimdi birkaç saat soruşturma oldum ve bunu altına alınamıyor bana

sll.h: In member function ‘bool list::contains(T) [with T = account]’:

customer.h:25:35: instantiated from here

sll.h:261:3: error: no match for ‘operator==’ in ‘temp->node::data == item’

account.h:36:6: note: candidate is: bool account::operator==(account&)

söyler olduğu yerdir. Şablonları kullanmamla ilgili bir şey olabileceğinden şüpheleniyorum. Operatörün aşırı yüklenip yüklenmediğini görmek için test programı oluşturdum ve beklendiği gibi çalışıyor.

Ayrıca not: Bir müşteri sınıfı var Burada içerdiği hesapların listesi budur ve bu "add" yöntemidir. Maalesef 2'den fazla hiperlink yayınlayamıyorum, bu yüzden bu sınıfın düzgün bir şekilde yazılmasını istiyorum. = P

Linked list class

: kod biraz uzun bir pastie kullanılır

cevap

6

Operatörünüz ==, const parametresiyle karşılaştırmaya çalışırken, argüman referansı olarak doğru argümanını alır. BTW, operatörünüz == ayrıca bir kurucu üyesidir.

  1. Operatörünüz == bir const üye olmak ve ücretsiz bir fonksiyon ya da iki parametre ele olmayacak olması daha iyi olurdu

  2. Operatörünüz == menü noktası bir sabit başvuru almalı dönüşüm için aynı şekilde ve dizeden hesaba örtülü bir dönüşümünüz var.

  3. örtük dönüştürme gerçekten istediği bu mu?

  4. Genel veri üyesi hesabıdır var. Gerçekten istedim mi?

İlgili konular