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.
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ı.
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
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 Ol Şimdi DeğilÜ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.
< Bu mesaj bu kişi tarafından değiştirildi :DHoroHoro:D -- 13 Nisan 2012; 12:29:41 >