Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
2
Cevap
1363
Tıklama
0
Öne Çıkarma
C++ + operator overloading
:
14 yıl
Yüzbaşı
Konu Sahibi

Merhaba arkadaşlar.
Magic the Gathering benzeri bir oyun için program yazdım, ancak şu anda elimde tek bir sorun var ve bunun için yardıma ihtiyaç duyuyorum.

Elimde 2 adet class var ve bu classlardan biri Creature classı ve aynı zamanda bir adet de Enchantment classım var. + operatörü ile (+ kullanmak zorundayım) bir creature classı ile bir enchantment classını toplamam gerekiyor ve bu işlem enchantment classındaki 2 değeri creature classındaki 2 değer ile toplamak üzerine. Önce yazdığımda sıkıntının ap=ap+ench.ap ifadesindeki ap ifadesini eşitliğin iki yanında kullanmak üzerine olduğunu düşündüm ancak bu durumu değiştirdikten sonra sıkıntının operatörün kendisi ile ilgili olduğunu farkettim. Operatör işlemine sadece saçma şeyler yazdırmak için kullandığımda yine sorunla karşılaştım. main fonksiyonda toplama işlemini yorum satırına aldığımda hiçbir runtime hatası ile karşılaşmıyorum. Kodlarım aşağıda:

İki classın definitionları

class Creature: public Land{
Cost cost;
int ap;
int hp;
Enchantment *e;
public:
void operator+(Enchantment&);
Creature(const string,const string,int, int,Cost*,const string);
bool canEnchantable(Enchantment &);
bool isAffordable(const Land *, const int);
void print();
};

class Enchantment: public Land{
friend class Creature;
int ap;
int hp;
Cost cost;
public:
Enchantment(const string,const string,int, int,Cost*,const string);
bool isAffordable(Land *, int);
void print();
};

Bu da operatör declarationu

void Creature::operator+(Enchantment& incench){
cout << "Enchanting the creature" << endl;
cout << "old ap: " << ap << endl;
cout << "new ap: " << ap << endl;
cout << "old hp: " << hp << endl;
cout << "new hp: " << hp << endl;
cout << "Creature enchanted" << endl;
}

Gördüğünüz üzere sadece yazı yazdırıyor. Creature enchanted yazısını gördükten sonra runtime hatası alıyorum. Yani scopetan çıkamıyor program. Gözümden kaçan bir hata mı var acaba? Yardımcı olabilirseniz sevinirim, teşekkürler.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





< Bu mesaj bu kişi tarafından değiştirildi :DHoroHoro:D -- 13 Nisan 2012; 12:29:41 >

Q
14 yıl
Yüzbaşı

Bildiğim kadarıyla, a ve b herhangi tipte değişkenler olsun. a+b işlemi aslında a.operator+(b) fonksiyonuna eşittir.

Bence problem şu noktada çıkıyor:

a + b + c gibi bir işlem söz konusuysa bu işlem a.operator+(b.operator+(c)) fonksiyonuna denk. Ancak b.operator+(c) fonksiyonunun dönüş tipi void! Yani dıştaki fonksiyona gelen parametre yok.

Mantığını anlatmaya çalıştım, kısacası
void operator+(Enchantment&) değil de
Enchantment& operator+(Enchanment&) olmalı.


Bu mesaja 1 cevap geldi.
:
14 yıl
Yüzbaşı
Konu Sahibi

main fonksiyonu içeren cpp dosyasını ben yazmadığım için benden beklenen formattan dışarı çıkmam mümkün değil. Aynı şekilde bu fonksiyonun dönüş formatını void yerine başka bir duruma da dönüştürme şansına sahip değilim.

c1+e şeklinde bir ifade kullanıldığı için bu Creature operator+(Enchantment&) olmak zorunda



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.