2016-04-12 32 views
1

Bu yüzden bir proje için metin tabanlı bir video oyunu yapmak zorundayım. "Kiremit" ve sonra "duvar" adında bir alt sınıf denilen bir sınıf yaptım. Daha sonra aşağıda gösterilen bir dizi fayans yaptım. Merkezi karo, B2 bir duvardır. typeid(B2)==typeid(wall)'u karşılaştırdığımda, döşeme B2'nin duvar tipi olmasına rağmen false değerini döndürür. "Savaşçı" sınıfının bir x ve bir y bileşeni vardır.Typeid neden her zaman false döndürüyor?

//Initiate map 
    const int rows = 3; 
    const int cols = 3; 
    tile A1, A2, A3, B1, B3, C1, C2, C3; 
    fighter wizard(1, 2, 6, ft::mage, 100); 
    C3 = tile(wizard, "There's all this magic stuff everywhere."); 
    wall B2= wall("A wall blocks your path."); 
    tile map[rows][cols] = {{A1, A2, A3}, 
          {B1, B2, B3}, 
          {C1, C2, C3}}; 
... 

fighter player1(0, 0, 0, ft::warrior); 

... 

string input = ""; 
while(input!="quit") 
{ 
    cin >> input; 
    if (input == "left") { 
     if (typeid(map[player1.y][player1.x - 1]) == typeid(wall)) 
      cout << map[player1.y][player1.x - 1].scene; 
+2

Peki, neden sizce Ayrıca bkz' [player1.y] [1 player1.x] map? Ben saf bir kiremit olduğunu söyleyebilirim (B2 bir duvar olsa bile, nesne kopyası => ** dilimleme **) – deviantfan

+0

http://stackoverflow.com/questions/274626/what-is-object-slicing – deviantfan

+1

@deviantfan doğru yolda. Bir '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'dizisini kopyalamaya çalıştığınızda bir sorun yaşarsınız. Tile * 'nin temel sınıf olduğu için,“ Döşeme * ”veya“ Duvar * ”türlerine işaret eden bir dizi * Döşeme * türüne sahip olduğunuzu tahmin ediyorum. –

cevap

1
tile map[rows][cols] 

saklar kiremit nesneler. Bu nesneleri incelemek için tile sınıfında olduklarını göreceksiniz. Orijinal B2 nesnesinin türü değil, wall. Bu nedenle tile == wall'u her zaman karşılaştıracaktır. .

Dinamik türün korunması ile ilgileniyorsanız, (akıllı) işaretçiler veya orijinal nesneyi referans alan herhangi bir şekilde kullanmanız gerekir. Bu nesnelerin dinamik bir türe/sanal işlevlere sahip olması gerekir. `Duvar mı -

What is dynamic type of object

İlgili konular