Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
2
Cevap
1428
Tıklama
0
Öne Çıkarma
C++ + operator overloading
:
14 yıl (849 mesaj)
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.





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

Q
14 yıl (504 mesaj)
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 (849 mesaj)
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.